开发中经常需要使用Shape和Selector,如果每个都用xml设置的话,会占用apk大小,同时命名多了也会混乱,使用代码来设置会方便很多。
需要用到2个类:GradientDrawable和StateListDrawable
相关API:
setColor(rgb); //填充颜色
setGradientType(GradientDrawable.RECTANGLE); //shape矩形setCornerRadius(radius); //四周圆角半径setStroke(1,strokenColor); //边框厚度与颜色下面提供一个工具类以及使用代码
【工具类DrawableUtils】:
public class DrawableUtils {
public static GradientDrawable getDrawable(int rgb,float radius){ GradientDrawable gradientDrawable = new GradientDrawable();gradientDrawable.setColor(rgb);//设置颜色
gradientDrawable.setGradientType(GradientDrawable.RECTANGLE);//设置显示的样式 gradientDrawable.setCornerRadius(radius);//设置圆角的半径 gradientDrawable.setStroke(DensityUtil.dip2px(1),rgb);//描边return gradientDrawable;
}public static StateListDrawable getSelector(Drawable normalDrawable,Drawable pressDrawable) {
StateListDrawable stateListDrawable = new StateListDrawable(); //给当前的颜色选择器添加选中图片指向状态,未选中图片指向状态 stateListDrawable.addState(new int[]{android.R.attr.state_enabled, android.R.attr.state_pressed}, pressDrawable); stateListDrawable.addState(new int[]{android.R.attr.state_enabled}, normalDrawable); //设置默认状态 stateListDrawable.addState(new int[]{}, normalDrawable); return stateListDrawable; }}【使用】:
public void initData(String content) {
//随机打乱datas顺序 Collections.shuffle(Arrays.asList(datas)); random=new Random(); //动态创建TextView for(int i = 0; i < datas.length; i++) { TextView textView=new TextView(getActivity()); textView.setText(datas[i]); //【设置textView的属性】============================================= //字体大小 textView.setTextSize(DensityUtil.dip2px(10)); //padding int padding = DensityUtil.dip2px(3); textView.setPadding(padding,padding,padding,padding); //margin ViewGroup.MarginLayoutParams params=new ViewGroup.MarginLayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); params.leftMargin=DensityUtil.dip2px(8); params.topMargin=DensityUtil.dip2px(8); params.rightMargin=DensityUtil.dip2px(8); params.bottomMargin=DensityUtil.dip2px(8); textView.setLayoutParams(params); //背景颜色 int red=random.nextInt(211); int green=random.nextInt(211); int blue=random.nextInt(211); int rgb= Color.rgb(red, green, blue); //设置背景方式1: //textView.setBackgroundColor(rgb); //设置背景方式2: float radius=DensityUtil.dip2px(5); //textView.setBackground(DrawableUtils.getDrawable(rgb,radius)); //【设置textView的点击事件或者说是selector】=========================== //设置Selector GradientDrawable normalDrawable = DrawableUtils.getDrawable(rgb, radius); GradientDrawable pressDrawable = DrawableUtils.getDrawable(Color.WHITE, radius); StateListDrawable selector = DrawableUtils.getSelector(normalDrawable, pressDrawable); textView.setBackground(selector); //设置点击响应// textView.setClickable(true); textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getActivity(), ((TextView)v).getText().toString(), Toast.LENGTH_SHORT).show(); } });//【将textView添加到FramLayout中】=====================================
flowLayout.addView(textView); } }