-2

我想为按钮动态创建选择器。当按钮被禁用(setEnable(false))时,它的颜色应该改变。

4

3 回答 3

0

StateListDrawable就是答案。

但是,如果您只是想根据不同的状态更改颜色,则不要编写一堆与选择器相关的 xml。

关键是动态构建一个StateListDrawable。

我已经厌倦了编写 xml,所以我创建了一个StateListDrawableBuilder和一个DrawableBuilder来这样做。

看看它,抱歉没有显示任何代码。

于 2015-07-16T06:18:42.583 回答
0

发现我的代码中有愚蠢的错误。

创建选择器的方法

 public static StateListDrawable createSelectorsWithStates(int[] state,
        Drawable[] drawables)
    {
    StateListDrawable stateDrawable = new StateListDrawable();
    for (int i = 0; i < state.length; i++)
    {   
        stateDrawable.addState(new int[] { state[i] }, drawables[i]);
    }
    return stateDrawable;
    }

要将 drawable 设置为按钮:

Drawable enable = ResourceManager.createRectangleShape(
             bgColor, null, borderRadius);
        enable.setAlpha((int)0.5f);
        Drawable disable = ResourceManager.createRectangleShape(
            bgColor, null, borderRadius);
        disable.setAlpha(150);

        ResourceManager.setDrawable(v1, ResourceManager
            .createSelectorsWithStates(new int[] {
                android.R.attr.state_enabled,
                -android.R.attr.state_enabled },
                new Drawable[] { enable, disable }));
于 2015-07-16T06:59:50.877 回答
-4
btn.setEnable(false);
btn.setBackgroundColor(color);

请不要使用选择器。

于 2015-07-16T05:59:55.453 回答