为启用和禁用状态动态创建选择器可绘制对象
Create selector drawable dynamically for enable and disable state
我想为按钮动态创建选择器。当按钮被禁用时(setEnable(false)
),它的颜色应该改变。
btn.setEnable(false);
btn.setBackgroundColor(color);
请不要使用选择器。
StateListDrawable就是答案。
如果你只想根据不同的状态改变颜色,但是不想写一堆选择器相关的xml。
关键点是动态构建一个StateListDrawable。
我厌倦了写 xml,所以我创建了一个 StateListDrawableBuilder and a DrawableBuilder 来这样做。
看看吧,很抱歉没有显示任何代码。
发现我的代码中存在愚蠢的错误。
创建选择器的方法
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 }));
我想为按钮动态创建选择器。当按钮被禁用时(setEnable(false)
),它的颜色应该改变。
btn.setEnable(false);
btn.setBackgroundColor(color);
请不要使用选择器。
StateListDrawable就是答案。
如果你只想根据不同的状态改变颜色,但是不想写一堆选择器相关的xml。
关键点是动态构建一个StateListDrawable。
我厌倦了写 xml,所以我创建了一个 StateListDrawableBuilder and a DrawableBuilder 来这样做。
看看吧,很抱歉没有显示任何代码。
发现我的代码中存在愚蠢的错误。
创建选择器的方法
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 }));