代码设置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);
}
}
代码设置Shape和Selector的更多相关文章
- Java代码更改shape和selector文件的颜色值
Android里面经常会使用shape或者selector来定制一些View的背景.那么如果想要动态更改shape或者seletor文件中的颜色值,该怎么处理呢? 一.Java代码更改shape的颜色 ...
- Android 用代码设置Shape,corners,Gradient
网上查找资料 记录学习 int strokeWidth = 5; // 3dp 边框宽度 int roundRadius = 15; // 8dp 圆角半径 int strokeColor = Col ...
- JAVA代码设置selector不同状态下的背景
Selector设置button点击效果(详细)以及常见问题https://www.jianshu.com/p/a0ddba6d7969 Android 代码动态设置TextView的背景.颜色Sel ...
- 活用shape、selector和layer-list来打造自己想要的背景效果
活用shape.selector和layer-list来打造自己想要的背景效果 2016-04-27 13:52 281人阅读 评论(0) 收藏 举报 版权声明:本文为博主原创文章,未经博主允许不得转 ...
- android 开发:shape和selector和layer-list的(详细说明)
目录(?)[+] Shape 简介 使用的方法 属性 Selector 简介 使用的方法 layer-list 简介 例子 最后 <shape>和<selector>在An ...
- android 开发 xml绘制shape与Selector与layer-list 一 基础篇
首先我们先来了解状态效果 android:state_pressed=["true" | "false"] 按下状态 android:state_focuse ...
- Android——shape和selector和layer-list的(详细说明 转)
<shape>和<selector>在Android UI设计中经常用到.比如我们要自定义一个圆角Button,点击Button有些效果的变化,就要用到<shape> ...
- 【转】Android开发:shape和selector和layer-list的(详细说明)
<shape>和<selector>在Android UI设计中经常用到.比如我们要自定义一个圆角Button,点击Button有些效果的变化,就要用到<shape> ...
- Android shape与selector标签使用
原文地址:Android shape与selector标签使用 Android中提供一种xml的方式,让我们可以自由地定义背景,比较常用的就是shape标签和selector标签 shape shap ...
随机推荐
- javascript_core_04之数组API
1.数组API——splice: ①删除:var deletes=arr.splice(starti,n):删除starti位置开始的n个,返回删除元素组成的临时数组: ②插入:arr.splice( ...
- vm中centos7配置静态ip访问外网
我使用的是桥接方式,具体步骤如下 1.设置虚拟机网络: 编辑>虚拟网络编辑器 2.设置vm中操作系统的网络设置 3.进入centos7中后修改网络配置: 另附我的宿主机网络配 ...
- word-wrap: break-word; break-word: break-all;区别
word-break:break-all和word-wrap:break-word都是能使其容器如DIV的内容自动换行. 它们的区别就在于: 1,word-break:break-all 例如div宽 ...
- CircularSeekBar
/** * @author Raghav Sood * @version 1 * @date 26 January, 2013 */ package com.appaholics.circularse ...
- 后端码农谈前端(CSS篇)第五课:CSS样式
一.背景: CSS 允许应用纯色作为背景,也允许使用背景图像创建相当复杂的效果. 1.背景色 可以使用 background-color 属性为元素设置背景色.这个属性接受任何合法的颜色值. 例如: ...
- 如何用Python寻找重复文件并删除
在实际生活中,经常会有文件重复的困扰,即同一个文件可能既在A目录中,又在B目录中,更可恶的是,即便是同一个文件,文件名可能还不一样.在文件较少的情况下,该类情况还比较容易处理,最不济就是one by ...
- 什么是WeakHashMap--转
原文地址:http://laravel.iteye.com/blog/2303244 Java WeakHashMap 到底Weak在哪里,它真的很弱吗?WeakHashMap 的适用场景是什么,使用 ...
- 【web前端面试题整理05】做几道前端面试题休息休息吧
前言 连续学了两天javascript的东西了,我们都累了,于是今天还是上一套面试题吧,大家一起休息休息,也为下个星期可能会有的面试准备下. 题目一览 CSS1. overflow-x 属于 CS ...
- ShineTime - 带有 CSS3 闪亮特效的缩略图相册
ShineTime 是一个效果非常精致的缩略图相册,鼠标悬停到缩略图的时候有很炫的闪光效果,基于 CSS3 实现,另外缩略图也会有立体移动的效果.特别适用于个人摄影作品,公司产品展示等用途,快来来围观 ...
- ibatis轻松入门
近日,由于公司项目应用开发的逻辑层使用的是iBatis.上网查了些资料,自己写了点demo入门.感觉良好.iBatis实在是比Hibernate很容易入门,贡献出来与各路菜鸟分享(后文附源码),希望得 ...