android自定义radiogroup,Android自定义RadioGroup
最近做项目时需要用到RadioGroup,发现Android原生的RadioGroup太丑了,所以自己写了一个,效果如下所示:
其实就是由4个Button组成的LinearLayout,只是为了方便点击效果的切换所以封装了一下。代码如下:
package com.dy.erp.view;
import android.content.Context;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import com.dy.erp.R;
import com.dy.erp.util.DensityUtils;
/**
* Created by dy on 2016/5/25 10:52.
*/
public class MyRadioButton extends LinearLayout {
private Button[] btns;
private int selectedPosition;
private RadioBtnOnClick mRadioBtnOnClick;
public MyRadioButton(Context context, AttributeSet attrs) {
super(context, attrs);
//默认button数量为4,如果读者扩展的话,只需自定义attrs一个number,在xml里面填写属性
//然后在代码中通过TypedArray获取number
init(context, 4);
}
public MyRadioButton(Context context) {
super(context);
//默认button数量为4
init(context, 4);
}
//自定义构造函数
public MyRadioButton(Context context, int number) {
super(context);
init(context, number);
}
private void init(Context context, int number) {
//默认排列方式为水平
setOrientation(LinearLayout.HORIZONTAL);
// LayoutInflater inflater = (LayoutInflater) context
// .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// inflater.inflate(R.layout.view_service, this);
setViews(context, number);
}
private void setViews(Context context, int number) {
btns = new Button[number];
//新建number个Button
for (int i = 0; i < number; i++) {
final Button button = new Button(context);
//如需修改button的text则可通过btns数组操作
button.setText((i + 1) + "年");
LinearLayout.LayoutParams params = new
LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT);
//button的间隔,这里是默认水平排列方式,所以只写了left,right的margin
//如果为竖直排列的话,则修改top,bottom
params.setMargins(20, 0, 20, 0);
params.weight = 1;
//设置button的点击效果
button.setBackgroundResource(R.drawable.selector_radio_btn);
//button.setMinHeight((int) DensityUtils.px2dp(context, 20));
button.setGravity(Gravity.CENTER);
btns[i] = button;
button.setTag(i);
if (i == 0) {
button.setSelected(true);
}
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
//该button选中
view.setSelected(true);
//其他button则要修改为未选中
setSelectedFalse((int) view.getTag());
//当前选中的位置
selectedPosition = (int) view.getTag();
if (mRadioBtnOnClick != null) {
mRadioBtnOnClick.click((int) view.getTag());
}
}
});
addView(button, params);
}
}
//获取当前选中的位置
public int getSelectedPosition() {
return this.selectedPosition;
}
//设置当前选中的位置
public void setSelectedPosition(int position) {
btns[position].setSelected(true);
setSelectedFalse(position);
this.selectedPosition = position;
}
//修改未选中button的状态
private void setSelectedFalse(int selectedPosition) {
for (int i = 0; i < btns.length; i++) {
if (i == selectedPosition)
continue;
if (btns[i] != null)
btns[i].setSelected(false);
}
}
//供外部设置button监听事件
public void setRadioBtnOnClick(RadioBtnOnClick radioBtnOnClick) {
this.mRadioBtnOnClick = radioBtnOnClick;
}
//button点击接口
public interface RadioBtnOnClick {
void click(int position);
}
}
下面贴上button点击效果的xml文件,读者可随意修改,可控制button的形状,边框,颜色等等。
selector_radio_btn.xml
color.xml
#ff7F7F7F
#fffed000
#ffffffff
android自定义radiogroup,Android自定义RadioGroup相关推荐
- android 自定义表单,Android实现Ant Design 自定义表单组件
Ant Design 组件提供了Input,InputNumber,Radio,Select,uplod等表单组件,但实际开发中这是不能满足需求,同时我们希望可以继续使用Form提供的验证和提示等方法 ...
- android炫酷的自定义view,Android自定义View实现炫酷进度条
本文实例为大家分享了Android实现炫酷进度条的具体代码,供大家参考,具体内容如下 下面我们来实现如下效果: 第一步:创建attrs文件夹,自定义属性: 第二步:自定义View: /** * Cre ...
- android单线字体,Android自定义字体
在main文件夹下,新建assets/fonts文件,添加.otf文件 image.png 字体工具类 import android.app.Application; import android.g ...
- android 自定义命名空间,Android自定义ActionBar实例
本文实例讲述了android自定义actionbar的实现方法.分享给大家供大家参考.具体实现方法如下: android 3.0及以上已经有了actionbar的api,可以通过引入support p ...
- android 自定义图片容器,Android应用开发中自定义ViewGroup视图容器的教程
一.概述在写代码之前,我必须得问几个问题: 1.ViewGroup的职责是啥?ViewGroup相当于一个放置View的容器,并且我们在写布局xml的时候,会告诉容器(凡是以layout为开头的属性, ...
- android sqlite自定义函数,Android中自定义一个View的方法详解
本文实例讲述了Android中自定义一个View的方法.分享给大家供大家参考,具体如下: Android中自定义View的实现比较简单,无非就是继承父类,然后重载方法,即便如此,在实际编码中难免会遇到 ...
- Android Paint应用之自定义View实现进度条控件
在上一篇文章<Android神笔之Paint>学习了Paint的基本用法,但是具体的应用我们还没有实践过.从标题中可知,本文是带领读者使用Paint,自定义一个进度条控件. 上图就是本文要 ...
- android 自定义图形,Android自定义View之图形图像(模仿360的刷新球自定
概述: 360安全卫士的那个刷新球(姑且叫它刷新球,因为真的不知道叫什么好,不是dota里的刷新球!!),里面像住了水一样,生动可爱,看似简单,写起来不太简单,本例程只是实现了它的部分功能而已,说实话 ...
- android 自定义键盘_Android自定义输入车牌号键盘、车牌简称,数字 ,字母键盘...
本文来自阿钟的投稿,全文阅读大约十分钟 为了便于用户快捷的输入车牌号码便需要自定义个车牌键盘,而不是使用系统的键盘输入,上效果图: 横屏效果 图片 竖屏效果 图片 一.首先我们要来分析一下需要做哪些东 ...
- [android] 练习样式主题自定义activity切换动画
主要练习了自定义样式和主题,继承android系统默认的样式并修改,练习xml定义淡入淡出动画 anim/fade_in.xml <?xml version="1.0" en ...
最新文章
- 2019牛客暑期多校训练营(第七场)
- python中定义变量和数组_Python中的线程和全局变量 - 数组和标准变量之间的区别?...
- BZOJ4590: [Shoi2015]自动刷题机
- 两个变量实现查找坏环c语言,C/C++编程笔记:C语言编程知识要点总结!大一C语言知识点(全)...
- java定时器克隆方式,Java-DropWizard指标计量器与计时器
- 北京焦灼?上海颓废?看大数据如何解读城市性格
- java消费rabbitMQ队列消息
- 女性买房需要注意哪些问题
- android高德地图设置经纬度,安卓高德地图开发自定义线路规划(按着自己定义的经纬度规划线路)...
- java arraylist 赋值_ArrayList源码解析,老哥,来一起复习一哈?
- Web应用的负载均衡、集群、高可用(HA)解决方案整理总结
- gdi win7奔溃_gdiplus.dll 32/64位
- 计算机内加减法的溢出处理
- 人人都可以参与开源!龙蜥社区最不容错过的开发者活动来了
- 3GPP协议下载地址
- 星巴克 销售数据分析_星巴克大数据科学家纳米级推广战略顶峰项目
- 移动开发期末大作业-备忘录app
- VS2008SP1的MFC测试-(OFFICE2007风格)Ribbon风格(DJ尐舞图形画板2008)
- 如何使用Python解锁星河远征军的科幻旅途
- 田野调查手记·浮山篇(五)
热门文章
- 从C++到.NET 揭开多态的面纱
- 利用C++模板编写的序列化框架
- 从系统中取得指定资源图像(转载)
- 经典面试题(25):以下代码将输出的结果是什么?
- 看,他们都转行做web前端工程师了
- java unsigined short_LDD之数据类型
- 表格控件对比_小白如何开发出苏宁易购同款表格协同文档系统?
- 安装easy_install 和ipython
- java怎么播放不了声音,java – 为什么这段代码不播放声音文件
- mac用什么写python程序_mac下,有哪些python开发工具可用