扩展RadioGroup,实现RadioButton换行可单选功能;
1、效果图:

2、自定义MyRadioGroup
/**
* @Dec :解决RadioGroup中两个RadioButton选中以及RadioButton换行布局的RadioGroup
* <p>
* https://blog.youkuaiyun.com/yuanzihui/article/details/50462496
* @Author : Caowj
* @Date : 2018/11/20 16:48
*/
public class MyRadioGroup extends LinearLayout {
// holds the checked id; the selection is empty by default
private int mCheckedId = -1;
// tracks children radio buttons checked state
private CompoundButton.OnCheckedChangeListener mChildOnCheckedChangeListener;
// when true, mOnCheckedChangeListener discards events
private boolean mProtectFromCheckedChange = false;
private OnCheckedChangeListener mOnCheckedChangeListener;
private PassThroughHierarchyChangeListener mPassThroughListener;
public MyRadioGroup(Context context) {
super(context);
setOrientation(VERTICAL);
init();
}
public MyRadioGroup(Context context, AttributeSet attrs) {
super(context, attrs);
mCheckedId = View.NO_ID;
final int index = VERTICAL;
setOrientation(index);
init();
}
private void init() {
mChildOnCheckedChangeListener = new CheckedStateTracker();
mPassThroughListener = new PassThroughHierarchyChangeListener();
super.setOnHierarchyChangeListener(mPassThroughListener);
}
@Override
public void setOnHierarchyChangeListener(OnHierarchyChangeListener listener) {
// the user listener is delegated to our pass-through listener
mPassThroughListener.mOnHierarchyChangeListener = listener;
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
// checks the appropriate radio button as requested in the XML file
if (mCheckedId != -1) {
mProtectFromCheckedChange = true;
setCheckedStateForView(mCheckedId, true);
mProtectFromCheckedChange = false;
setCheckedId(mCheckedId);
}
}
@Override
public void addView(final View child, int index, ViewGroup.LayoutParams params) {
if (child instanceof RadioButton) {
((RadioButton) child).setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
((RadioButton) child).setChecked(true);
checkRadioButton((RadioButton) child);
if (mOnCheckedChangeListener != null) {
mOnCheckedChangeListener.onCheckedChanged(MyRadioGroup.this, chi

本文介绍了一种自定义RadioGroup的方法,解决了在RadioGroup中两个RadioButton同时选中及RadioButton换行布局的问题。通过扩展RadioGroup,实现了可换行且保持单选状态的功能,并提供了具体使用示例。
最低0.47元/天 解锁文章
1305

被折叠的 条评论
为什么被折叠?



