如何以编程方式设置RadioButton Android Circle的颜色

时间:2016-07-05 20:25:48

标签: android android-radiobutton

我想更改RadioButton的实际圈子。

我已经遍布StackOverflow,似乎没什么用。

我使用的是API 17,无法使用ColorStateList。定制的抽屉似乎让我们看起来和感觉很糟糕。

我想要改变按钮提示的效果,但我需要以编程方式进行。

我确信我一定要错过一些非常简单的事情!

2 个答案:

答案 0 :(得分:1)

  

如何以编程方式设置RadioButton Android的颜色

这是非特定的,所以我发现这是最相关的:

RadioButton rad;//initialize first!
//You can set the background color
rad.setBackgroundColor(Color.BLUE);
//Text color
rad.setTextColor(Color.WHITE);
//or highlight color
rad.setHighlightColor(Color.GREEN);

高亮颜色是按住RadioButton时出现的颜色(默认为黄色)

修改

在单选按钮的初始化中,将其称为AppCompatRadioButton而不是

AppCompatRadioButton rad = ....
rad.setHighlightColor(Color.GREEN);

改编自:https://stackoverflow.com/a/32472971/6296561

修改

试试这个:

<强> activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".MainActivity"
    tools:showIn="@layout/app_bar_main">

    <RadioGroup
        android:id="@+id/radioGroup"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">


    </RadioGroup>

</RelativeLayout>

<强> MainActivity.java

public class MainActivity extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);


        RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radioGroup);

        /**
         * First Radio Button
         */
        RadioButton RB1= (RadioButton) getLayoutInflater().inflate(R.layout.custom_radiobutton, null);//initialize and set content
        RB1.setText("RB1");
        radioGroup.addView(RB1);//add the radiobutton to the radiogroup defined in the layout

        /**
         * Second Radio Button
         */
        RadioButton RB2 = (RadioButton) getLayoutInflater().inflate(R.layout.custom_radiobutton, null);//initialize and set content
        RB2.setText("RB2");
        radioGroup.addView(RB2);//add the radiobutton to the radiogroup defined in the layout
    }
}

<强> custom_radiobutton.xml

<?xml version="1.0" encoding="utf-8"?>
<RadioButton xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:buttonTint="@color/colorPrimary"
    android:text="">
<!-- leave empty -->
</RadioButton>

注意: buttonTint仅适用于API 21+。 (未经测试)您可以将RadioButton更改为AppCompatRadioButton。 (它未经测试,因此我不确定它是否适用于api 20及更低版本)

<?xml version="1.0" encoding="utf-8"?>
<AppCompatRadioButton xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:buttonTint="@color/colorPrimary"
    android:text="">
<!-- leave empty -->
</AppCompatRadioButton>

Documentation about AppCompatRadioButton

如果您使用AppCompatRadioButton,我认为您还必须使用AppCompatRadioGroup并将ACRB的创建编辑为:

AppCompatRadioButton RB1 = (AppCompatRadioButton) getLayoutInflater().inflate(R.layout.custom_radiobutton, null);//initialize and set content
RB1.setText("RB1");
radioGroup.addView(RB1);//add the radiobutton to the radiogroup defined in the layout

答案 1 :(得分:0)

可以通过使用您自己的自定义图像来更改RadioButton圆圈的颜色。 假设您有两个圆形图像,分别用于选中和未选中。 checkradiobutton和uncheckedradiobutton。现在,使xml(custom_radio_button)可绘制如下:

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_checked="true" android:drawable="@drawable/checkedradiobutton" />
<item android:state_checked="false" android:drawable="@drawable/unchekedradiobutton" />

我相信您正在使用

创建单选按钮
  RadioButton rb = new RadionButton(context);
  radioButton.setLayoutParams(new 
  ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 
  ViewGroup.LayoutParams.WRAP_CONTENT));
  radioButton.setTextColor(ContextCompat.
  getColor(context,R.color.royal_blue));

 radioButton.setButtonDrawable(R.drawable.custom_radio_button);//this will change the default circles