【问题标题】:Selector Drawable programmatically [duplicate]以编程方式可绘制的选择器[重复]
【发布时间】:2014-06-18 15:41:48
【问题描述】:

我想以编程方式创建选择器可绘制对象。形状必须采用以下形式:

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

【问题讨论】:

  • 好的,谢谢。我想我可以用它做点什么;)

标签: java android drawable


【解决方案1】:

好的,这就是我使用链接主题的想法。

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

【讨论】:

    【解决方案2】:

    您可以只提供一个可绘制对象作为您的 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>
    

    【讨论】:

    • 但是我必须更改给定的 Drawable Ressource,据我所知这是不可能的?
    • 如果您想更改特定颜色,只需更改整个 Selector(即,为您需要更改的状态提供具有不同可绘制对象的不同选择器)。我不确定您是否能够使用 Java 更改特定的可绘制状态。
    • 一切都解决了,就像我想要的那样。看我自己的答案;)
    猜你喜欢
    • 2017-06-09
    • 1970-01-01
    • 2013-08-30
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    相关资源
    最近更新 更多