今天要说的,并不是很复杂的,但确是很常见的。下面这个图,就是今天的主角(可换行的RadioGroup):
可换行的单选效果,在大多网购的app中选择物品可以看到。有时候,项目中可能需要,直接拿过来用,这样就方便多了。
我们要实现可换行的单选效果,可以选择这种方式:
1.继承RadioGroup,改变RadioGroup的布局结构。
2.继承ViewGroup,写一个类似RadioGroup的容器,控制子View的单选;并且继承View,写一个类似RadioButton的子View,并重写这个子View的onTouchEvent(),使用onDraw()方法绘制需要的效果。
这两种实现方法,显然第一种是比较简单的。在这里,我也是介绍第一种方式。 我们继承了RadioGroup,只需要重写布局方式即可,其它逻辑,都不用自己处理,却拥有RadioGroup对外开放的功能。要重写RadioGroup的布局效果,需要重写的方法 onMeasure()和onLayout() (我们需要从宏观上了解ViewGroup的绘制流程,即先调用onMeasure()再调用onLayout()最后onDraw(),至于onDraw(),一般不再ViewGroup中重写该方法)。 重写的过程中,我们需要考虑到ViewGroup的padding值,和RaidoButton的margin值。 下面还是先看代码,能够从感官上了解大致流程:
最核心的类,RadioGroupEx
package com.mjc.radiogroupex;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.RadioGroup;
/**
* Created by mjc on 2016/1/20.
* 重新对RadioGroup进行布局,可以折行