自定义AppCompatRadioButton,带有Toggle Drawable文本右侧

时间:2018-01-28 18:39:23

标签: android android-custom-view android-radiobutton

我试着设置`Toggle Drawable'在AppCompatRadioButton的右侧'带

的文字
public class mRadioButton extends AppCompatRadioButton {

public mRadioButton(Context context) {
    super(context);
    init();
}
...

private void init() {
    setButtonDrawable(null);
    int padding = Constant.calculateDimen(getContext(), 20.0);
    setPadding(padding, padding, padding, padding);
    setGravity(Gravity.RIGHT);
    setLayoutParams(new FrameLayout.LayoutParams(-1, -1));

    int[] attrs = { android.R.attr.listChoiceIndicatorSingle };
    TypedArray ta = getContext().getTheme().obtainStyledAttributes(attrs);
    Drawable indicatorDrawable = ta.getDrawable(0);
    setCompoundDrawables(null, null, indicatorDrawable, null);
    ta.recycle();
}

}

但最终,没有出现Toggle Drawable:

enter image description here

如果设置评论setButtonDrawable(null);,则添加切换文字左侧:

enter image description here

并设置setButtonDrawable(indicator);出现Toggle Drawable左侧的文本右侧:

enter image description here

发生了什么,什么是错的,该怎么做?

1 个答案:

答案 0 :(得分:0)

感谢@Napster我改变了:

setCompoundDrawables(null, null, indicatorDrawable, null);

致:

setCompoundDrawablesWithIntrinsicBounds(null,null,indicatorDrawable,null);

但是好的!?

然后我搜索发生了什么,发现了这个:

手动设置文字和图片的相对位置,常用方法如下:

setCompoundDrawables(left, top, right, bottom);


setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom);

意思是在文本上,左,右,下位置设置Drawable显示。

但两者不同:

  1. setCompoundDrawables Paint drawable的宽度和高度是drawable.setBound()设置宽度和高度, 因此,Drawables必须已经调用了setBounds(Rect)。 在使用长度和宽度之前,必须使用Drawable.setBounds设置Drawable。

  2. setCompoundDrawablesWithIntrinsicBoundsDraw可绘制的宽度和高度是可绘制的固定宽度和高度, 所以,只需拥有The Drawables'边界将被设置为其内在界限。