很多应用主界面都是activity+fragement的方式,在底部或者顶部有几个按钮进行切换,布局可以写成RadioGroup包含RadioButton。在使用drawableTop时我们无法在布局中设置图片大小,这时候可以去代码中设置。
核心代码:
private void setRadioButtonImg() {
Drawable First = getResources().getDrawable(R.drawable.main_selector_book);
First.setBounds(0, 0,40 ,40);//参数从左到右依次是距左右边距离,距上下边距离,图片长度,图片宽度
mainData.rgMainListenbook.setCompoundDrawables(null, First, null, null);//mainData.rgMainListenbook是控件id
Drawable Second = getResources().getDrawable(R.drawable.main_selector_radiostation);
Second.setBounds(0, 0,40 ,40);
mainData.rgMainRadiostation.setCompoundDrawables(null, Second, null, null);
Drawable Three = getResources().getDrawable(R.drawable.main_selector_campaign);
Three.setBounds(0, 0,40 ,40);
mainData.rgMainCampaign.setCompoundDrawables(null, Three, null, null);
Drawable Four = getResources().getDrawable(R.drawable.main_selector_mine);
Four.setBounds(0, 0,40 ,40);
mainData.rgMainMine.setCompoundDrawables(null, Four, null, null);
}
如果在一个应用中不止一处需要设置大小,那每次这样写重复的部分就造成了代码冗余,为了多次使用方便,我把它写成了一个工具类,需要时直接调用即可。工具类如下:
public class RadioButtonImgUtil {
/**
*设置图片显示在控件的上方
*/
private static void setCompoun(RadioButton button, Drawable drawable) {
button.setCompoundDrawables(null, drawable, null, null);//只放上面
}
/**
*传递图片资源,设置大小
*/
private static Drawable getResouDrawable(Context context, int drawables,int size) {
Drawable drawable = context.getResources().getDrawable(drawables);
drawable.setBounds(0, 0, size, size);
return drawable;
}
public static void setRadioButtonImg(Context context,int[] drawables,int size,
RadioButton... radioButton) {
//drawable代表图片集合,size就是想设置的图片大小,radioButton这里代表控件集合
//可变形参必须放在参数列表最后面,否则系统将无法识别形参个数,参数列表中也不可以同时出现多个可变参数
for (int i = 0; i < radioButton.length; i++) {
setCompoun(radioButton[i], getResouDrawable(context, drawables[i],size));
}
}
}
需要时这样使用:
//资源集合,mipmap和selector都可以
int[] drawables = {R.drawable.main_selector_book,R.drawable.main_selector_radiostation,
R.drawable.main_selector_campaign,R.drawable.main_selector_mine};
RadioButtonImgUtil.setRadioButtonImg(this,drawables,40,mainData.rgMainListenbook, mainData.rgMainRadiostation, mainData.rgMainCampaign,mainData.rgMainMine);
希望能帮助到大家,若有问题可以留言(●'◡'●)