选择器Drawable以编程方式

时间:2014-06-18 15:41:48

标签: java android drawable

我想以编程方式创建选择器drawables。形状必须采用以下形式:

<?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。

2 个答案:

答案 0 :(得分:4)

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

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;
}

答案 1 :(得分:0)

您可以在Selector XML中提供drawable作为资源。 drawable可以是任何东西(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>