【Android动态生成按钮样式】弱龄寄事外,委怀在琴书。这篇文章主要讲述Android动态生成按钮样式相关的知识,希望能为你提供帮助。
动态生成按钮样式
使用:
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;
}}
推荐阅读
- (转)Mac OS X 下部分Android手机无法连接adb问题之解决方案
- App架构师成长路线
- Smobiler 4.4 更新预告 Part 1(Smobiler能让你在Visual Studio上开发APP)
- Win10创造者怎样更新?
- Win10无线适配器或访问点有问题如何处理?
- Win10系统注册表被管理员禁用怎样办?
- Win10玩求生之路2鼠标看不见怎样办?
- Win10系统搜索结果还没有完全就绪怎样办?
- Win10如何将私密文件伪装成系统技巧图标?