最近做项目时需要用到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相关推荐

  1. android 自定义表单,Android实现Ant Design 自定义表单组件

    Ant Design 组件提供了Input,InputNumber,Radio,Select,uplod等表单组件,但实际开发中这是不能满足需求,同时我们希望可以继续使用Form提供的验证和提示等方法 ...

  2. android炫酷的自定义view,Android自定义View实现炫酷进度条

    本文实例为大家分享了Android实现炫酷进度条的具体代码,供大家参考,具体内容如下 下面我们来实现如下效果: 第一步:创建attrs文件夹,自定义属性: 第二步:自定义View: /** * Cre ...

  3. android单线字体,Android自定义字体

    在main文件夹下,新建assets/fonts文件,添加.otf文件 image.png 字体工具类 import android.app.Application; import android.g ...

  4. android 自定义命名空间,Android自定义ActionBar实例

    本文实例讲述了android自定义actionbar的实现方法.分享给大家供大家参考.具体实现方法如下: android 3.0及以上已经有了actionbar的api,可以通过引入support p ...

  5. android 自定义图片容器,Android应用开发中自定义ViewGroup视图容器的教程

    一.概述在写代码之前,我必须得问几个问题: 1.ViewGroup的职责是啥?ViewGroup相当于一个放置View的容器,并且我们在写布局xml的时候,会告诉容器(凡是以layout为开头的属性, ...

  6. android sqlite自定义函数,Android中自定义一个View的方法详解

    本文实例讲述了Android中自定义一个View的方法.分享给大家供大家参考,具体如下: Android中自定义View的实现比较简单,无非就是继承父类,然后重载方法,即便如此,在实际编码中难免会遇到 ...

  7. Android Paint应用之自定义View实现进度条控件

    在上一篇文章<Android神笔之Paint>学习了Paint的基本用法,但是具体的应用我们还没有实践过.从标题中可知,本文是带领读者使用Paint,自定义一个进度条控件. 上图就是本文要 ...

  8. android 自定义图形,Android自定义View之图形图像(模仿360的刷新球自定

    概述: 360安全卫士的那个刷新球(姑且叫它刷新球,因为真的不知道叫什么好,不是dota里的刷新球!!),里面像住了水一样,生动可爱,看似简单,写起来不太简单,本例程只是实现了它的部分功能而已,说实话 ...

  9. android 自定义键盘_Android自定义输入车牌号键盘、车牌简称,数字 ,字母键盘...

    本文来自阿钟的投稿,全文阅读大约十分钟 为了便于用户快捷的输入车牌号码便需要自定义个车牌键盘,而不是使用系统的键盘输入,上效果图: 横屏效果 图片 竖屏效果 图片 一.首先我们要来分析一下需要做哪些东 ...

  10. [android] 练习样式主题自定义activity切换动画

    主要练习了自定义样式和主题,继承android系统默认的样式并修改,练习xml定义淡入淡出动画 anim/fade_in.xml <?xml version="1.0" en ...

最新文章

  1. 2019牛客暑期多校训练营(第七场)
  2. python中定义变量和数组_Python中的线程和全局变量 - 数组和标准变量之间的区别?...
  3. BZOJ4590: [Shoi2015]自动刷题机
  4. 两个变量实现查找坏环c语言,C/C++编程笔记:C语言编程知识要点总结!大一C语言知识点(全)...
  5. java定时器克隆方式,Java-DropWizard指标计量器与计时器
  6. 北京焦灼?上海颓废?看大数据如何解读城市性格
  7. java消费rabbitMQ队列消息
  8. 女性买房需要注意哪些问题
  9. android高德地图设置经纬度,安卓高德地图开发自定义线路规划(按着自己定义的经纬度规划线路)...
  10. java arraylist 赋值_ArrayList源码解析,老哥,来一起复习一哈?
  11. Web应用的负载均衡、集群、高可用(HA)解决方案整理总结
  12. gdi win7奔溃_gdiplus.dll 32/64位
  13. 计算机内加减法的溢出处理
  14. 人人都可以参与开源!龙蜥社区最不容错过的开发者活动来了
  15. 3GPP协议下载地址
  16. 星巴克 销售数据分析_星巴克大数据科学家纳米级推广战略顶峰项目
  17. 移动开发期末大作业-备忘录app
  18. VS2008SP1的MFC测试-(OFFICE2007风格)Ribbon风格(DJ尐舞图形画板2008)
  19. 如何使用Python解锁星河远征军的科幻旅途
  20. 田野调查手记·浮山篇(五)

热门文章

  1. 从C++到.NET 揭开多态的面纱
  2. 利用C++模板编写的序列化框架
  3. 从系统中取得指定资源图像(转载)
  4. 经典面试题(25):以下代码将输出的结果是什么?
  5. 看,他们都转行做web前端工程师了
  6. java unsigined short_LDD之数据类型
  7. 表格控件对比_小白如何开发出苏宁易购同款表格协同文档系统?
  8. 安装easy_install 和ipython
  9. java怎么播放不了声音,java – 为什么这段代码不播放声音文件
  10. mac用什么写python程序_mac下,有哪些python开发工具可用