自定义布局RadioButton Android

时间:2016-05-11 13:10:45

标签: android radio-button custom-controls

我在Android中自定义RadioButton Widget时遇到问题。 我需要一个带图标的RadioButton和图标下的单行文本。 iOS中底部栏的方面,图标和文字以不同颜色检查。 我已经创建了一个Custom类,扩展了RadioButton并扩展了我的布局。

小部件工作正常,但不显示我的布局,它只显示背景,而不是imageView和textView。 有什么想法吗?

谢谢你的进步

EventListVM

布局自定义是:

public class RadioButtonImageToggle extends RadioButton {

private Drawable imageNormalState, imageCheckedState;
private ImageView imageView;
private TextView textViewTitle;

public RadioButtonImageToggle(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    initViews(context,attrs, defStyleAttr);
}

public RadioButtonImageToggle(Context context, AttributeSet attrs) {
    super(context, attrs);
    initViews(context, attrs, 0);
}


private void initViews(Context context, AttributeSet attrs, int defStyle) {


    TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.RadioButtonImageToggle, defStyle, R.style.Widget_Holo_RadioImageToggle);

    try {
        // get the text and colors specified using the names in attrs.xml
        imageNormalState = a.getDrawable(R.styleable.RadioButtonImageToggle_imageNormalState);
        imageCheckedState = a.getDrawable(R.styleable.RadioButtonImageToggle_imageCheckedState);
    } finally {
        a.recycle();
    }
    LayoutInflater layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = layoutInflater.inflate(R.layout.radio_image_toggle, null);

    imageView = (ImageView) view.findViewById(R.id.iconToggle);
    textViewTitle = (TextView) view.findViewById(R.id.textViewTitle);

    imageView.setImageDrawable(imageNormalState);
    textViewTitle.setText(getText());
}

@Override
public void toggle()
{
    if(isChecked()) {
        imageView.setImageDrawable(imageCheckedState);
        if(getParent() instanceof RadioGroup) {
           ((RadioGroup)getParent()).clearCheck();
        }
    } else {
        imageView.setImageDrawable(imageNormalState);
        setChecked(true);
    }
}

1 个答案:

答案 0 :(得分:0)

只需为文字选择器制作可绘制文件

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:color="#ffffffff"/>
<item android:color="@color/que_font"/></selector>

为单选按钮背景制作另一个drawable

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_checked="true"><shape>
    <solid android:color="@color/select_btn_bg" />
    <corners
        android:radius="5dp"
        />

    <stroke android:width="1dp" android:color="@color/select_btn_border" />
</shape></item>

<item android:state_checked="false"><shape android:shape="rectangle">
    <!--<solid android:color="@android:color/transparent" />-->
    <solid android:color="@color/default_btn_bg" />
    <corners
        android:radius="5dp"
        />


    <stroke
        android:width="1dp"
        android:color="@color/default_btn_border"
        />

</shape></item></selector>

然后在你的单选按钮中设置如下所示的属性

      android:textColor="@drawable/rbtn_text_selector"
    android:background="@drawable/rbtn_background_selector"  
android:button="@null"