【问题标题】:How can I change color of icon in icon-only toggle button in my case?在我的情况下,如何更改仅图标切换按钮中的图标颜色?
【发布时间】:2021-02-04 15:19:02
【问题描述】:

我正在使用 Material Design,但遇到了问题。 我有一个com.google.android.material.button.MaterialButtonToggleGroup 组,其中包括样式为@style/Widget.App.Button.OutlinedButton.IconOnly 的纯图标切换按钮。 我正在使用来自documentation 的样式:

<style name="Widget.App.Button.OutlinedButton.IconOnly" parent="Widget.MaterialComponents.Button.OutlinedButton">
        <item name="iconPadding">0dp</item>
        <item name="android:insetTop">0dp</item>
        <item name="android:insetBottom">0dp</item>
        <item name="android:paddingLeft">12dp</item>
        <item name="android:paddingRight">12dp</item>
        <item name="android:minWidth">48dp</item>
        <item name="android:minHeight">48dp</item>
</style>

截图如下:without selectionselected。 选择按钮时,图标具有 colorPrimary 颜色。但我希望每个按钮在选择时都有自己的颜色(例如,第一个按钮 - 绿色,第二个 - 黄色等)我尝试使用来自 this question 的提示,但它会导致错误。 iconColor、tint 等也会导致错误。可能是因为我使用的是 Material Style ...如何在仅图标切换按钮中更改图标的颜色?不一定只有在选择按钮时才改变颜色,如果按钮在选择之前为绿色并且在选择时将具有 colorPrimary,我会很高兴。

【问题讨论】:

  • 更新。按钮的图标是用我需要的颜色创建的。但是都是灰色的。

标签: android material-ui material-design android-button material-components-android


【解决方案1】:

如果按钮在选择之前为绿色并且在选择时将具有 colorPrimary,我会很高兴。

图标为灰色,因为默认颜色为android:alpha="0.60" android:color="?attr/colorOnSurface"

您可以将其更改为覆盖 iconTint 属性的样式:

     <com.google.android.material.button.MaterialButtonToggleGroup>
    
         <com.google.android.material.button.MaterialButton               
         style="@style/Widget.App.Button.OutlinedButton.IconOnly.Green"
         />
    
         <com.google.android.material.button.MaterialButton
           style="@style/Widget.App.Button.OutlinedButton.IconOnly.Red"
         />

地点:

<style name="Widget.App.Button.OutlinedButton.IconOnly.Green">
    <item name="iconTint">@color/icon_tint_selector</item>
</style>

使用选择器:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:alpha="1.00" android:color="?attr/colorPrimary" android:state_checkable="true" android:state_checked="true" android:state_enabled="true"/>
    <item android:alpha="0.60" android:color="@color/green500" android:state_checkable="true" android:state_checked="false" android:state_enabled="true"/> <!-- this color -->
    <item android:alpha="1.00" android:color="?attr/colorPrimary" android:state_enabled="true"/>
    <item android:alpha="0.38" android:color="?attr/colorOnSurface"/>
</selector>

【讨论】:

  • 但是这种风格(@style/Widget.App.Button.OutlinedButton.IconOnly)对于所有仅图标的切换按钮都很常见......因此所有按钮都是绿色的,但我需要第一个 -绿色,第 2 - 黄色,第 3 - 橙色等。我无法创建新样式,因为它基于材料以及我如何理解我无法为按钮应用不同样式。还是不是真的?
  • 关于风格。您可以定义另一种样式,例如&lt;style name="Widget.App.Button.OutlinedButton.IconOnly.Green"&gt;,只需添加iconTint,因为它扩展了Widget.App.Button.OutlinedButton.IconOnly,并且在您的按钮中只需使用style="@style/Widget.App.Button.OutlinedButton.IconOnly.Green"。作为替代方法,只需在您的Button 中添加app:iconTint
  • 我很抱歉这个愚蠢的问题,但是选择器应该在 colors.xml 中?附言应用程序:iconTint 不起作用
  • @sb69lg 我已经更新了答案。对于选择器,只需在 res/color/ 文件夹中创建一个文件。
  • 对于每个带有选择器的按钮新文件? @color/icon_tint_selector 是文件名?
猜你喜欢
  • 1970-01-01
  • 2019-01-24
  • 2022-01-02
  • 2023-02-21
  • 1970-01-01
  • 1970-01-01
  • 2019-05-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多