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

<?xml version="1.0" encoding="utf-8"?>                                                                                                                        

color.xml

<color name="deep_gray">#ff7F7F7Fcolor>

<color name="orange">#fffed000color>
<color name="white">#ffffffffcolor>


更多相关文章

  1. Android(安卓)刷新页面更新数据方法探究
  2. Android(安卓)ViewPager事件滑动监听修改
  3. Android设置锁屏/休眠时长
  4. Android(安卓)Studio Git 修改用户名、密码、URL
  5. Android(安卓)O中修改NotificationChannel 属性,升级app后该修改
  6. Android(安卓)Studio同一工程生成不同的app名,包名,图标分别设置
  7. android 5 设置图案锁,锁屏界面进入相机拍照、查看锁定的照片后,退
  8. Android调用第三方百度APP进行导航
  9. Android(安卓)listview 实现列表多选

随机推荐

  1. Android开发系列(二十二):AdapterViewFlippe
  2. [导入]2010-03-02 传智播客—Android(四)数
  3. 调用startactivityforresult后,onactivity
  4. android log 日志分析 来自 Google I/O 2
  5. Android(安卓)中Binder的解释
  6. 安卓程序代写 网上程序代写[原]ViewGroup
  7. 开源项目 log4android 使用方式详解
  8. Android对话框使用小结
  9. Android(安卓)中的几个常用控件
  10. G1定制攻略