RadioButton的圖標大小並沒有相應的佈局參數,本文通過自定義屬性的方式自定義RadioButton,實現控製圖片大小。 ...
RadioButton的圖標大小並沒有相應的佈局參數,本文通過自定義屬性的方式自定義RadioButton,實現控製圖片大小。
- 本文要點:
- 自定義屬性的使用。
- 解決RadioButton文字上、下、左、右的圖標大小自定義問題。
- 此方法對TextView內的圖標也適用。
- 問題如下:
- 解決方法:
1.values/attrs.xml 文件中:自定義rb_width 和 rb_height 兩個屬性
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="MyRadioButton"> <attr name="rb_width" format="dimension"/> <attr name="rb_height" format="dimension"/> </declare-styleable> </resources>
2.自定義RadioButton
1 package top.toly.www.myqq.view; 2 3 import android.content.Context; 4 import android.content.res.TypedArray; 5 import android.graphics.drawable.Drawable; 6 import android.util.AttributeSet; 7 import android.widget.RadioButton; 8 9 import top.toly.www.myqq.R; 10 import utils.shortUtils.Change; 11 12 /** 13 * 作者:張風捷特烈 14 * 時間:2018/3/28:6:30 15 * 郵箱:[email protected] 16 * 說明:自定義RadioButton 屬性:rb_width rb_height 17 */ 18 public class MyRadioButton extends RadioButton { 19 20 private float mImg_width; 21 private float mImg_height; 22 23 public MyRadioButton(Context context) { 24 super(context); 25 } 26 27 public MyRadioButton(Context context, AttributeSet attrs) { 28 super(context, attrs); 29 TypedArray t = context.obtainStyledAttributes(attrs, R.styleable.MyRadioButton); 30 mImg_width = t.getDimension(R.styleable.MyRadioButton_rb_width, Change.dp2px(25)); 31 mImg_height = t.getDimension(R.styleable.MyRadioButton_rb_height, Change.dp2px(25)); 32 t.recycle(); 33 } 34 35 @Override 36 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 37 super.onMeasure(widthMeasureSpec, heightMeasureSpec); 38 //讓RadioButton的圖標可調大小 屬性: 39 Drawable drawableLeft = this.getCompoundDrawables()[0];//獲得文字左側圖片 40 Drawable drawableTop = this.getCompoundDrawables()[1];//獲得文字頂部圖片 41 Drawable drawableRight = this.getCompoundDrawables()[2];//獲得文字右側圖片 42 Drawable drawableBottom = this.getCompoundDrawables()[3];//獲得文字底部圖片 43 if (drawableLeft != null) { 44 drawableLeft.setBounds(0, 0, (int) mImg_width, (int) mImg_height); 45 this.setCompoundDrawables(drawableLeft, null, null, null); 46 } 47 if (drawableRight != null) { 48 drawableRight.setBounds(0, 0, (int) mImg_width, (int) mImg_height); 49 this.setCompoundDrawables(null, null, drawableRight, null); 50 } 51 if (drawableTop != null) { 52 drawableTop.setBounds(0, 0, (int) mImg_width, (int) mImg_height); 53 this.setCompoundDrawables(null, drawableTop, null, null); 54 } 55 if (drawableBottom != null) { 56 drawableBottom.setBounds(0, 0, (int) mImg_width, (int) mImg_height); 57 this.setCompoundDrawables(null, null, null, drawableBottom); 58 } 59 } 60 }
3.使用屬性控制RadioButton 中的圖片大小
- 註意:
- <top.toly.www.myqq.view.MyRadioButton 為自定義控制項類的全路徑名
-
xmlns:toly="http://schemas.android.com/apk/res-auto" 聲明命名空間,其中toly為自定義名稱,可替換(需與第3點冒號前名稱一致)
-
toly:rb_width="30dp" toly:rb_height="30dp" 為自定義屬性的使用
-
android:drawableTop="@drawable/tab_msg_selector" 為指定的圖片資源
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:toly="http://schemas.android.com/apk/res-auto" android:id="@+id/my_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/qq_title_text"> <RadioGroup android:id="@+id/rg_btns" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:orientation="horizontal"> <top.toly.www.myqq.view.MyRadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:id="@+id/rb_msg" android:checked="false" toly:rb_width="30dp" toly:rb_height="30dp" android:button="@null" android:gravity="center" android:drawableTop="@drawable/tab_msg_selector" android:text="消息"/> <top.toly.www.myqq.view.MyRadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:id="@+id/rb_contact" android:background="@android:color/transparent" android:checked="false" android:button="@null" toly:rb_width="30dp" toly:rb_height="30dp" android:gravity="center" android:drawableTop="@drawable/tab_contact_selector" android:text="聯繫人"/> <top.toly.www.myqq.view.MyRadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:id="@+id/rb_act" android:button="@null" toly:rb_width="30dp" toly:rb_height="30dp" android:gravity="center" android:background="@android:color/transparent" android:drawableTop="@drawable/tab_act_selector" android:text="動態" /> </RadioGroup> </RelativeLayout>
4.結果圖: