可编程选择器Drawable

3

我希望能够以编程方式创建选择器图形。该形状必须符合以下形式:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true"><shape>
            <solid android:color="#4aa5d4" />
        </shape></item>
    <item><shape>
            <stroke android:width="1dp" android:color="#4aa5d4" />
        </shape></item>

</selector>

为什么?因为我想要这两种颜色可以改变。我知道我需要创建某种Drawable来实现这一点。我已经成功地创建了自己的GradientDrawables,就像这样:
public GradientDrawable getBackgroundGradient() {
    GradientDrawable gd = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, new int[] { BACKGROUND_GRADIENT_TOP_COLOR, BACKGROUND_GRADIENT_BOTTOM_COLOR });
    return gd;
}

但现在我需要一个SelectorDrawable。

1
好的,谢谢。我觉得我可以用这个做点什么 ;) - Torhan Bartel
2个回答

6

好的,这是我使用链接主题想出来的内容。

public StateListDrawable getSelectorDrawable(int color) {
    StateListDrawable out = new StateListDrawable();
    out.addState(new int[] { android.R.attr.state_pressed }, createNormalDrawable(color));
    out.addState(StateSet.WILD_CARD, createStrokeDrawable(color));
    return out;
}

public GradientDrawable createNormalDrawable(int color) {
    GradientDrawable out = new GradientDrawable();
    out.setColor(color);
    return out;
}

public GradientDrawable createStrokeDrawable(int color) {
    GradientDrawable out = new GradientDrawable();
    out.setStroke(1, color);
    return out;
}

0

在您的 Selector XML 中,您只需提供一个可绘制的资源即可。该可绘制资源可以是任何类型(如PNG、XML等)

示例:

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

但是我需要更改那个特定的可绘制资源,但据我所知这似乎是不可能的? - Torhan Bartel
如果您想更改特定颜色,只需更改整个选择器(即提供具有不同可绘制状态的不同选择器)。我不确定您是否能够使用Java更改特定状态的可绘制对象。 - Booger
问题已经全部解决,就像我想要的那样。请查看我的答案 ;) - Torhan Bartel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接