如何创建自定义Android单选按钮?

时间:2013-10-01 10:08:43

标签: java android styles radio-button themes

我的Android应用程序中有几个单选按钮选项,但我希望它们看起来完全不同。更像下面的内容(快速模型),您只需单击所需的单词,它就会使它们变为粗体和下划线。

enter image description here

有人知道我怎么能达到这样的目的吗?欢迎所有提示!

2 个答案:

答案 0 :(得分:1)

一般来说,要覆盖默认窗口小部件的外观,您需要创建一个可绘制文件夹并将所有xml定义放在该文件夹中。然后在布局的RadioButton块中引用该xml文件。

这是一篇关于如何做到这一切的好文章:

http://blog.devminded.com/posts/custom-android-radiobutton

答案 1 :(得分:0)

我知道可能会迟到,但这并不是为自己保留解决方案的理由。

1)您需要为.XML及其RadioGroup实施RadioButton布局。将RadioGroup子方向设置为Horizontal值以并排显示按钮。将RadioButton按钮设置为@null值以隐藏默认选择器 enter image description here

如下:

<RadioGroup
        android:id="@+id/my_radiogroup"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <RadioButton
            android:id="@+id/i_like_radiobutton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:button="@null"
            android:padding="10dp"
            android:text="I Like"
            android:textColor="@android:color/holo_orange_light" />

        <RadioButton
            android:id="@+id/i_dont_like_radiobutton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:button="@null"
            android:padding="10dp"
            android:text="I Dont Like"
            android:textColor="@android:color/holo_orange_light" />
    </RadioGroup>

2)Activity课程中,初始化它们并设置其听众。监听器应跟踪RadioButton更改的更改,并根据状态选择或取消选择设置UI更改。如下:

    RadioGroup myRadioGroup = (RadioGroup) findViewById(R.id.my_radiogroup);
    RadioButton likeRadioButton = (RadioButton) findViewById(R.id.i_like_radiobutton);
    RadioButton dontLikeRadioButton = (RadioButton) findViewById(R.id.i_dont_like_radiobutton);

    //Like button listener
    likeRadioButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                //Make the text underlined
                SpannableString content = new SpannableString(getString(R.string.like_text));
                content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
                buttonView.setText(content);
                //Make the text BOLD
                buttonView.setTypeface(null, Typeface.BOLD);
            } else {
                //Change the color here and make the Text bold
                SpannableString content = new SpannableString(getString(R.string.like_text));
                content.setSpan(null, 0, content.length(), 0);
                buttonView.setText(content);
                buttonView.setTypeface(null, Typeface.NORMAL);

            }
        }
    });

    //Don't Like button listener
    dontLikeRadioButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                //Change the color here and make the Text bold
                SpannableString content = new SpannableString(getString(R.string.like_text));
                content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
                buttonView.setText(content);
                buttonView.setTypeface(null, Typeface.BOLD);
            } else {
                //Change the color here and make the Text bold
                SpannableString content = new SpannableString(getString(R.string.like_text));
                content.setSpan(null, 0, content.length(), 0); 
             buttonView.setText(content);
             buttonView.setTypeface(null, Typeface.NORMAL);

            }
        }
    });

3)现在,RadioButton将根据其状态自动更改颜色和TextStyle。如果需要,您可以添加更多自定义。

4)为了在用户选择任何按钮时执行必要的操作,我们需要覆盖setOnCheckedChangeListener的{​​{1}}方法,如下所示:

RadioGroup

除了分隔符之外,最终输出与问题图像非常相似。

enter image description here

我希望它有所帮助。