动态生成按钮样式
使用:
- int borderColor = Color.parseColor("#2E3135");
- int bgColor = Color.parseColor("#00FF00");
- // 设置 View 背景样式, 有边框宽度, 边框颜色, 圆角度数, 背景颜色.
- GradientDrawable shape = DrawableUtils.createShape(1, 4, borderColor, bgColor);
- btn1.setBackground(shape);
- int textNormalColor = Color.parseColor("#2E3135");
- int textPressColor = Color.parseColor("#FF0000");
- int textFocusColor = Color.parseColor("#00FF00");
- int textEnableColor = Color.parseColor("#0000FF");
- // 设置文本点击样式切换
- ColorStateList colorStateList = DrawableUtils.createColorStateList(textNormalColor, textPressColor, textFocusColor, textEnableColor);
- btn2.setTextColor(colorStateList);
- /* android:focusableInTouchMode="true" 控件默认获取焦点 */
- int color1 = Color.parseColor("#FF0000");
- int color2 = Color.parseColor("#00FF00");
- // 设置 View 点击样式切换
- GradientDrawable unSelected = DrawableUtils.createShape(1, 4, color1, color2);
- GradientDrawable selected = DrawableUtils.createShape(1, 4, color2, color1);
- StateListDrawable stateListDrawable = DrawableUtils.createStateListDrawable(unSelected, selected);
- btn3.setBackground(stateListDrawable);
工具类:
- public class DrawableUtils {
- /**
- * 创建一个 shape
- *
- * @param strokeWidth 边框宽度 (px)
- * @param roundRadius 圆角半径 (px)
- * @param strokeColor 边框颜色
- * @param fillColor 内部填充颜色
- * @return GradientDrawable
- */
- public static GradientDrawable createShape(int strokeWidth, int roundRadius, int strokeColor, int fillColor) {
- GradientDrawable gd = new GradientDrawable();
- gd.setColor(fillColor);
- gd.setCornerRadius(roundRadius);
- gd.setStroke(strokeWidth, strokeColor);
- return gd;
- }
- /**
- * 创建按钮文字点击样式
- *
- * @param normal 正常样式
- * @param pressed 按下样式
- * @param focused 焦点样式
- * @param unable 不可用样式
- * @return ColorStateList
- */
- public static ColorStateList createColorStateList(int normal, int pressed, int focused, int unable) {
- int[] colors = new int[]{pressed, focused, normal, focused, unable, normal};
- int[][] states = new int[6][];
- states[0] = new int[]{android.R.attr.state_pressed, android.R.attr.state_enabled};
- states[1] = new int[]{android.R.attr.state_enabled, android.R.attr.state_focused};
- states[2] = new int[]{android.R.attr.state_enabled};
- states[3] = new int[]{android.R.attr.state_focused};
- states[4] = new int[]{android.R.attr.state_window_focused};
- states[5] = new int[]{};
- return new ColorStateList(states, colors);
- }
- /**
- * 创建按钮点击样式
- *
- * @param unSelected 未点击样式
- * @param selected 点击样式
- * @return StateListDrawable
- */
- public static StateListDrawable createStateListDrawable(GradientDrawable unSelected, GradientDrawable selected) {
- StateListDrawable drawable = new StateListDrawable();
- drawable.addState(new int[]{android.R.attr.state_pressed}, selected);
- drawable.addState(new int[]{-android.R.attr.state_pressed}, unSelected);
- return drawable;
- }
- }
来源: http://www.bubuko.com/infodetail-2559528.html