更改选择器以编程方式指定的色调

时间:2019-02-14 09:31:05

标签: android android-drawable

我已经为ImageButton的色调设置了一个drawable,以便在启用或禁用按钮时图标的颜色会自动更改,此后是否有任何方法可以通过编程方式更改色调,所以我保持相同的行为启用和禁用状态使用不同的颜色?

my_layout.xml的内容:

<ImageButton
    android:id="@+id/button_minus"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="2"
    android:background="@color/default_button_background"
    android:tint="@drawable/button_tint_color"
    app:srcCompat="@drawable/ic_remove_24px" />

button_tint_color.xml的内容:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_enabled="false"
        android:color="@color/icon_tint_disable_color" />

    <item
        android:color="@color/icon_tint_enable_color" />
</selector>

然后在我的代码中,我只需要执行buttonMinus.setEnabled(true)buttonMinus.setEnabled(false),图标颜色就会自动更改。是否可以通过编程方式为启用的颜色或禁用的颜色中的一种或两种设置不同的颜色?

2 个答案:

答案 0 :(得分:0)

您可以使用我认为的这种方式:

if(buttonMinus.isEnabled()){
//With button enabled
yourIcon.setItemIconTintList(ColorStateList.ValueOf(yourColor));
}else{...}

答案 1 :(得分:0)

到目前为止,我发现最好的方法是以编程方式创建一个新的颜色状态列表并将其分配给按钮,是的,目的是避免以编程方式设置视觉属性,例如颜色...

        ColorStateList buttonStates = new ColorStateList(
                new int[][] {
                        { -android.R.attr.state_enabled },
                        {}
                },
                new int[] {
                        Color.RED,
                        Color.BLUE
                }
        );

        buttonMinus.setImageTintList(buttonStates);