RadioGroup与RadioButton配合实现一组数据的单选问题。
插播一条信息,在设置RadioButton的textColor的选中效果时,不能在drawable中创建想xml,得在res/color文件中创建xml,然后引用。
radioButton.setTextColor(getResources().getColorStateList(R.color.xxx));
这个过程中,需要注意几点。
RadioButton 设置前面小圆点消失 radioButton.setButtonDrawable(null)
RadioGroup 下面的RadioButton不能用其他控件包裹,否则就会是一个一个单独的RadioButton。
在动态创建RadioButton的时候,需要设置margin时,需要使用RadioGroup.LayoutParams 来创建布局参数,不然设置margin不起作用。
如何实现在RadioGroup与RadioButton配合时,现在点击两次RadioButton,取消选中
对以上问题,具体我们分析下:
为什么RadioGroup的直接子控件必须是RadioButt呢?
先来看下RadioGroup的init()方法
private void init() {
// tracks children radio buttons checked state 追踪RadioButton的选中状态
mChildOnCheckedChangeListener = new CheckedStateTracker();
// 监听层级变化 ViewGroup的子View移除和添加都会触发相对应的方法。
mPassThroughListener = new PassThroughHierarchyChangeListener();
super.setOnHierarchyChangeListener(mPassThroughListener);
}
/**
* {@inheritDoc} 给用户提供一个方法,可以自己实现层级的监听
*/
@Override
public void setOnHierarchyChangeListener(OnHierarchyChangeListener listener) {
// the user listener is delegated to our pass-through listener
mPassThroughListener.mOnHierarchyChangeListener = listener;
}
再看下,PassThroughHierarchyChangeListener 实现的添加和移除的方法
private class PassThroughHierarchyChangeListener implements
ViewGroup.OnHierarchyChangeListener {
private ViewGroup.OnHierarchyChangeListener mOnHierarchyChangeListener;
/**
* {@inheritDoc}
*/
public void