android - 基于状态的 ImageButton 图标色调

标签 android

我目前正在尝试使用当前纯白色的 Drawables 在一些 ImageButtons 上实现着色。 Tint Color 应该由 StateList 提供,并且应该根据按钮的当前状态而改变。状态列表看起来像:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#FF0000"/>
    <item android:color="#00FF00" android:state_enabled="false"/>
    <item android:color="#0000FF" android:state_pressed="true" android:state_enabled="true"/>
</selector>

按钮的布局 XML fragment 是:

<ImageButton
    android:id="@+id/btnNext"
    style="@style/Widget.AppCompat.Button.Borderless"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="@dimen/vertical_content_padding"
    android:layout_marginEnd="@dimen/horizontal_content_padding"
    android:contentDescription="@string/next"
    android:src="@drawable/ic_chevron_right_white_24dp"
    android:tint="@color/state_btn_tint_light"/>

颜色状态列表中的默认色调已被选中并正确显示。但是禁用按钮或按下它不会触发所有图标的任何颜色变化。我也尝试用 setImageTintList 实用地设置它.

最佳答案

您的代码应该可以工作。但是,有一个错误:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#FF0000"/>
    <item android:color="#00FF00" android:state_enabled="false"/>
    <item android:color="#0000FF" android:state_pressed="true" android:state_enabled="true"/>
</selector>

您需要颠倒状态的顺序。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#0000FF" android:state_pressed="true" android:state_enabled="true"/>
    <item android:color="#00FF00" android:state_enabled="false"/>
    <item android:color="#FF0000"/>
</selector>

我不完全确定它在内部是如何工作的,但它的功能似乎类似于 If/Else 语句。如果第一个条件失败,则进入第二个。由于您的第一个项目没有条件,它总是会被挑选而其他的将被忽略,给人的印象是颜色状态列表根本不起作用。因此,始终将条件最严格的颜色状态放在第一位。

关于android - 基于状态的 ImageButton 图标色调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48505834/

相关文章:

android - 如何验证应用内购买 Android 服务器端 Java?

android - 多种口味到位时的 Gradle 复制任务

android - progressBar.setIndeterminateDrawable() 不起作用

android - ListView.setOnItemClickListener 中的 StartActivity 崩溃

android - 如何修复 Html.fromHtml 链接焦点可见性问题(在 ICS 和 Honeycomb 中)?

java - Spinner 中的自定义行

android - 打开 NFC 模拟器不适用于 Android 模拟器

Android 应用无法在 Samsung Galaxy Apps 上提交(如何包含 Samsung SDK?)

java - 如何让应用保持存活?运行后出现奇怪的错误

c# - Android键盘覆盖文本框问题