日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

代码设置Shape和Selector

發布時間:2023/12/4 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 代码设置Shape和Selector 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

開發中經常需要使用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);
}
}

轉載于:https://www.cnblogs.com/libuyi/p/5906401.html

總結

以上是生活随笔為你收集整理的代码设置Shape和Selector的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。