【问题标题】:How to change background color of button MaterialToolbar?如何更改按钮 MaterialToolbar 的背景颜色?
【发布时间】:2022-08-09 01:01:40
【问题描述】:

传递到按下状态时如何更改按钮 MaterialToolbar 的颜色?

    <com.google.android.material.appbar.MaterialToolbar
        android:id=\"@+id/main_toolbar\"
        android:layout_width=\"match_parent\"
        android:layout_height=\"?android:attr/actionBarSize\"
        app:menu=\"@menu/webview_toolbar\"
        app:navigationIcon=\"@drawable/ic_baseline_keyboard_arrow_up_24\" />

屏幕截图按下状态为圆形

我尝试使用ColorStateList,它不适用于MaterialToolbar。但与LinearLayout 合作。

android:background=\"@drawable/selector_state_list\"
<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">
    <item android:drawable=\"@color/pressed_toolbox_item\"  android:state_pressed=\"true\" />
</selector>
  • 你想改变背景颜色或波纹?
  • @ltp我想改变颜色,当点击溢出菜单按钮时显示

标签: android android-layout android-xml


【解决方案1】:

如果您只想更改图标的颜色而不删除圆形图形(它是 selectableItemBackgroundBorderless 并且很难摆脱它,您需要使用溢出属性,看看here,部分溢出菜单属性),然后你可以进入你的片段/活动:

mainToolbar.overflowIcon = ContextCompat.getDrawable(this, R.drawable.selector_state_list)

并且您的选择器应包含两个可绘制对象(不是文件中的颜色),用于具有不同色调颜色的按下和非按下状态。以防万一,如果您不知道如何生成矢量:点击可绘制文件夹,新建 -> 矢量资源 -> 剪贴画。

【讨论】:

    【解决方案2】:

    试试这种方式,用MaterialToolbar 或(androidx 和 Material 主题)更改按钮颜色:

    <com.google.android.material.appbar.MaterialToolbar
        android:id="@+id/main_toolbar"
        android:layout_width="match_parent"
        android:layout_height="?android:attr/actionBarSize"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        app:navigationIcon="@drawable/ic_baseline_keyboard_arrow_up_24"/>
    

    并创建一个drawable文件_state.xml,添加如下代码。这里有两张不同的图片。

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android" >
    
       <item android:drawable="@drawable/ic_baseline_add_24"  android:state_pressed="true" />
       <item android:drawable="@drawable/ic_baseline_add_24_press" android:state_pressed="false" />
    
    </selector>
    

    在activity.java文件中,添加如下代码

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        MaterialToolbar toolbar = findViewById(R.id.main_toolbar);
        toolbar.setOverflowIcon(ContextCompat.getDrawable(this, R.drawable.state));
        setSupportActionBar(toolbar);
        Objects.requireNonNull(getSupportActionBar()).setDisplayShowHomeEnabled(true);
    }
    
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.webview_toolbar, menu);
        return true;
    }
    

    【讨论】:

    • 不,没用
    • @Viewed我更新了我的答案,试试这个,让我看看它是否有效
    【解决方案3】:

    在您的应用程序主题中覆盖 android:actionOverflowButtonStyleactionOverflowButtonStyle 并使用您自己的可绘制对象设置 backgroundandroid:background 样式属性:

    <style name="Theme.App" parent="Theme.Material3.DynamicColors.DayNight">
           ...
         <item name="android:actionOverflowButtonStyle">@style/ActionButtonOverflowStyle</item>
         <item name="actionOverflowButtonStyle">@style/ActionButtonOverflowStyle</item>
          ...
    </style>
                
    <style name="ActionButtonOverflowStyle" parent="Widget.AppCompat.ActionButton.Overflow">  
       <!--To change the icon-->
       <item name="src">@drawable/....</item>    
       <item name="android:src">@drawable/....</item>
    
       <!--To change the icon background/ripple-->
       <item name="background">@drawable/...</item>
       <item name="android:background">@drawable/...</item>
    
      
    </style>
    

    【讨论】:

      【解决方案4】:

      如果您使用矢量绘图作为导航图标, 您可以轻松地将颜色直接设置到矢量中。

      <vector
       ...
       android:tint="@color/design_default_color_primary_dark"> // if you are using themes then ?attr/colorControlNormal or whatever as you prefer
      
           <path />
      </vector>
      

      阅读这里material app bar

      或者

      如果您正在使用 pngs 作为导航图标, 您可以按如下方式使用“iconTint”属性,

          <item android:id="@+id/action_one"
          android:icon="@drawable/ic_action_icon"
          app:iconTint="@color/design_default_color_error"
          android:title="@string/action_one"
          app:showAsAction="ifRoom" />
      

      为了最佳实践,最好创建一个样式并将该样式应用为工具栏样式或直接在 ap 主题中设置,如下所示

          <style name="Theme.MyApptheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
          <item name="iconTint">@color/purple_500</item>
          <item name="colorPrimary">@color/purple_200</item>
          .
          .
      </style>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-04
        • 1970-01-01
        • 2021-06-22
        • 2015-04-03
        • 2011-06-26
        相关资源
        最近更新 更多