ラジオボタンの円の色を変更


158

プロジェクトの 1つでRadioButtonの円の色を変更したいのですが、どのプロパティを設定するか理解できませんでした。私が持っている背景色は黒なので、見えなくなります。円の色を白に設定したい。


:このリンク参照してください heliodorj.blogspot.in/2009/04/...
Androidデベロッパー

ラジオボタンに2つの画像を使用し、1つは選択し、もう1つは選択しません。ラジオボタンのクリック時にこの画像を変更し、setbackgroundリソースを使用するか、セレクターxmlを使用します。
SAURABH_12 2013年

回答:


288

よりシンプルに、buttonTintの色を設定するだけです:(APIレベル21以上でのみ機能します)

<RadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/radio"
    android:checked="true"
    android:buttonTint="@color/your_color"/>

values / colors.xmlに、この場合は赤みがかった色を入れます。

<color name="your_color">#e75748</color>

結果:

色付きのAndroidラジオボタン

コードで実行する場合(API 21以降も):

if(Build.VERSION.SDK_INT>=21)
{

    ColorStateList colorStateList = new ColorStateList(
            new int[][]{

                    new int[]{-android.R.attr.state_enabled}, //disabled
                    new int[]{android.R.attr.state_enabled} //enabled
            },
            new int[] {

                    Color.BLACK //disabled
                    ,Color.BLUE //enabled

            }
        );                       


    radio.setButtonTintList(colorStateList);//set the color tint list
    radio.invalidate(); //could not be necessary
}

1
@emaillenin、コードで色合いを変更するcontrol.getDrawable().setColorFilter(getResources().getColor(color), PorterDuff.Mode.SRC_IN);場合controlは、色合いを変更するコントロールであり、希望するcolor色の整数値である場所を使用する必要があります。例R.color.red
Jorge Arimany

1
@JorgeArimany RadioButtonの場合、それはgetButtonDrawableまたはgetCompoundDrawablesですか?getCompoundDrawablesがリストを返す
Lenin Raj Rajasekaran '19 / 11/19

@emaillenin、私はあなたが探しているのコードを追加することによって、私の答えをアップグレードした、あなたのコメントへの私の答えは、ボタンのような他のコントロールのためだった、あなたを助け、希望ありがとう
ホルヘArimany

3
@JorgeArimany 21以上で動作しました。21未満の回答を探しています
Lenin Raj Rajasekaran

チェックされたボタンの色を変更するには、状態を追加または置換してandroid.R.attr.state_checked、色を追加します。
6rchid

159

更新: 1.代わりにこれを使用してください

   <android.support.v7.widget.AppCompatRadioButton
        android:id="@+id/rbtn_test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:buttonTint="@color/primary" />

2.次に、この行を親レイアウトに追加するかAlt + Enter、Android Studioで自動追加します xmlns:app="http://schemas.android.com/apk/res-auto"

最小の例は次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.AppCompatRadioButton
        android:id="@+id/rbtn_test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:buttonTint="@color/primary" />

</LinearLayout>

3.プログラムでは、次のように呼び出す必要があります。 AppCompatRadioButton radioButton = (AppCompatRadioButton) view.findViewById(R.id.rbtn_test);

基本的に、この種のパターンは、AppCompatCheckBox、AppCompatButtonなどのすべてのAppCompactタイプに適用できます。

古い答え:

以下のandroid API 21をサポートするために、AppCompatRadioButtonを使用できます次に、setSupportButtonTintListメソッドを使用して色を変更します。これは、ラジオボタンを作成するためのコードスニペットです。

    AppCompatRadioButton rb;
    rb = new AppCompatRadioButton(mContext);

    ColorStateList colorStateList = new ColorStateList(
            new int[][]{
                    new int[]{-android.R.attr.state_checked},
                    new int[]{android.R.attr.state_checked}
            },
            new int[]{

                    Color.DKGRAY
                    , Color.rgb (242,81,112),
            }
    );
    rb.setSupportButtonTintList(colorStateList);

API 19でのテスト結果:

これはAPI 19でテストされています

詳細については、android リファレンスリンク参照してください


10
この答えは受け入れられるべきです。このサポートラジオボタンをxml経由で追加する場合は、次を使用します<android.support.v7.widget.AppCompatRadioButton ../>
Vinayak Garg

22
setSupportButtonTintList使用することを意図していないプライベートメソッドです。ラジオボタンは、Androidの特定のバージョンで奇妙に動作します。代わりに、を使用してくださいCompoundButtonCompat.setButtonTintList(rb, colorStateList)
wampastompa 2016年

2
@wampastompaは正しいです。API 22では、結果として、外側の円だけが表示され、チェックしたときに塗りつぶされませんでした。@aknay; 回答を更新してください
Nino van Hooff

1
私はAPI 16を使用しています。上記のAppCompatラジオボタンを追加しましたが、まだ正しく表示されていません。
tccpg288

1
コードは必要ありません。IgorOliveiraの回答を参照してください。すべてのバージョンで機能します。
Kirill Karmazin

77
<android.support.v7.widget.AppCompatRadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:buttonTint="@color/Color" />

11
これは、プリ、カレント、ポストのロリーポップデバイスに対する答えです。すばらしい
sdelvalle57

1
これは受け入れられる答えになるはずです。短くて完璧。注:andoid:buttonTint = "@ color / Color"ではなくapp:buttonTint = "@ color / Color"を使用してください。
Kirill Karmazin

受け入れられる@KirillKarmazinは21未満で機能する必要があります
user924

56

APIでの作業は、ポスト21と同様に21を事前に あなたのではstyles.xmlPUT:

<!-- custom style -->
<style name="radionbutton"
       parent="Base.Widget.AppCompat.CompoundButton.RadioButton">
    <item name="android:button">@drawable/radiobutton_drawable</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">false</item>
    <item name="android:backgroundDimEnabled">true</item>
</style>

あなたのradio button中のXMLは次のようになります。

<RadioButton
    android:layout_width="wrap_content"
    style="@style/radionbutton"
    android:checked="false"
    android:layout_height="wrap_content"
    />

今、すべてのあなたがISを行う必要が作るradiobutton_drawable.xml、あなたにdrawable folder。ここにあなたがそれに入れる必要があるものです:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:drawable="@drawable/radio_unchecked" android:state_checked="false" android:state_focused="true"/>
  <item android:drawable="@drawable/radio_unchecked" android:state_checked="false" android:state_focused="false"/>
  <item android:drawable="@drawable/radio_checked" android:state_checked="true" android:state_focused="true"/>
  <item android:drawable="@drawable/radio_checked" android:state_checked="true" android:state_focused="false"/>
</selector>

あなたradio_unchecked.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="oval">
  <stroke android:width="1dp" android:color="@color/colorAccent"/>
  <size android:width="30dp" android:height="30dp"/>
</shape>

あなたradio_checked.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item>
    <shape android:shape="oval">
      <stroke android:width="1dp" android:color="@color/colorAccent"/>
      <size android:width="30dp" android:height="30dp"/>
    </shape>
  </item>
  <item android:top="5dp" android:bottom="5dp" android:left="5dp" android:right="5dp">
    <shape android:shape="oval">
      <solid android:width="1dp" android:color="@color/colorAccent"/>
      <size android:width="10dp" android:height="10dp"/>
    </shape>
  </item>
</layer-list>

@color/colorAccentお好きな色に交換してください。


これをプログラムでどのように実行しますか?
tccpg288

@ tccpg288このxmlを使用していて、プログラムで色を変更したい場合は、単にradioButton.setChecked(false)またはradioButton.setChecked(true)を使用してください
Vaibhav Sharma

質問が理解できません。詳しく説明していただけますか?
Vaibhav Sharma、2016

私の間違いは、通常のRadioButtonとAppCompat RadioButtonのどちらを使用しても問題ないですか?
tccpg288

1
動作しません、RadioButtonを初期化するとどうなりますか?これが私のコードです:mPollAnswerArrayList.add((indexCreated)、new RadioButton((getActivity()。getApplicationContext())、null、R.style.radiobutton));
tccpg288

18

このコードを使用する必要があります:

<android.support.v7.widget.AppCompatRadioButton
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:buttonTint="@color/black"
                    android:text="Radiobutton1"
                    app:buttonTint="@color/black" />

使用するapp:buttonTint代わりにandroid:buttonTint、また、android.support.v7.widget.AppCompatRadioButton代わりにRadiobutton


16
  1. styles.xmlファイルでカスタムスタイルを宣言します。

    <style name="MyRadioButton" parent="Theme.AppCompat.Light">  
      <item name="colorControlNormal">@color/indigo</item>
      <item name="colorControlActivated">@color/pink</item>
    </style>  
  2. このスタイルをandroid:theme属性を介してRadioButtonに適用します。

    <RadioButton  
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="true"
        android:text="Radio Button"
        android:theme="@style/MyRadioButton"/>

    あなたの活動が拡大する場合のみ AppCompatActivity


1
これは回答として受け入れられるべきであり、すべてのバージョンで動作し、最もクリーンです
Antonis Radz

私は<item name="android:colorControlActivated">@color/pink</item>私のために働くためにそれを使わなければなりませんでした。理由はまだわかりません。そうでなければ、これは良い答えです。
テイラーヴェニサット

16

API 21の場合

カスタムスタイルRadioButton style.xmlを作成する

 <style name="RadioButton" parent="Theme.AppCompat.Light">
     <item name="colorAccent">@color/green</item>
     <item name="android:textColorSecondary">@color/mediumGray</item>
     <item name="colorControlNormal">@color/red</item>
 </style>

レイアウト使用テーマ:

<RadioButton
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:theme="@style/RadioButton" />

API 21以降の場合

ただbuttonTintを使用してください

 <RadioButton
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:buttonTint="@color/green" />

明確にする必要があります:buttonTintは、APIに関係なく、API 21 および AppCompat / AndroidXを使用するアプリで機能します
Chisko

12

質問は古いですが、私の答えは人々を助けると思います。xmlのスタイルを使用して、ラジオボタンのチェックされていない状態とチェックされている状態の色を変更できます。

<RadioButton
    android:id="@+id/rb"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:theme="@style/RadioButtonStyle" />

style.xml内

<style name="RadioButtonStyle" parent="Theme.AppCompat.Light">
        <item name="colorAccent">@android:color/white</item>
        <item name="android:textColorSecondary">@android:color/white</item>
</style>

このスタイルで目的の色を設定できます。


RadioButton内のテーマが機能しません(もう?)。ここをクリックしてもonClickメソッドが見つからないため、ボタンをクリックするとクラッシュします。
17

この問題には別の理由があります。そのビューにonClickを実装する前に、正しいビューのIDを取得していることを確認してください。
Jaura 2018年

9

buttonTintプロパティを設定します。たとえば、android:buttonTint="#99FF33"


9
これはAPI 21以降のみです
miracle-doh

7

私はこのように短い方法で作成しました(21の前だけでなく21の前のAPIで作業しています)

xmlのラジオボタンは次のようになります。

  <RadioButton android:id="@+id/radioid"                    
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"                 
                android:button="@drawable/radiodraw" />

radiodraw.xml内

  <?xml version="1.0" encoding="utf-8"?>
  <selector xmlns:android="http://schemas.android.com/apk/res/android">    
      <item android:state_checked="false" >
          <shape  android:shape="oval" >
              <stroke android:width="1dp" android:color="#000"/>
              <size android:width="30dp" android:height="30dp"/>
              <solid android:color="@android:color/transparent"/>
          </shape>
      </item>
      <item android:state_checked="true">
          <layer-list>
              <item>
                  <shape android:shape="oval">
                      <stroke android:width="1dp" android:color="#000"/>
                      <size android:width="30dp" android:height="30dp"/>
                      <solid android:color="@android:color/transparent"/>
                  </shape>
              </item>
              <item android:top="5dp" android:bottom="5dp" android:left="5dp" android:right="5dp">
                  <shape android:shape="oval">
                      <solid android:width="1dp" android:color="#000"/>
                      <size android:width="10dp" android:height="10dp"/>
                  </shape>
              </item>
          </layer-list>
      </item>
  </selector>

チェックされていないステータスを描画するために透明色を追加する必要があります。それ以外の場合は、黒一色の楕円を描画します。


6

時々あなたはこのようにcolorControlNormalをオーバーライドする必要があるだけです:

    <style name="RadioButtonStyle" parent="AppTheme">
       <item name="colorControlNormal">@color/pink</item>
       <item name="colorAccent">@color/colorPrimary</item>
       <item name="android:textColorSecondary">@color/black</item>
    </style>

そして、あなたはこのようなボタンを取得します:

ここに画像の説明を入力してください

チェックされていない状態にはcolorControlNormalが、チェックされている状態にはcolorAccentが使用されます。


5

それにはxml属性があります:

android:buttonTint="yourcolor"

最小APIが21より高いことを確認してください。そうでない場合、これは機能しません
Jcorretjer

これを下位互換性のために使用できます:app:buttonTint = "your_color"
Mridul Das

"Make sure your min API is higher then 21 or this won't work"それは誤りです。私はAndroidXとAPI 17をターゲットにしていますし、これは私のために働いていた唯一のものである
Chisko

3

無効、チェック済み、および有効の状態を変更したい場合は、次の手順を実行します。

<!-- Or androidX radio button or material design radio button -->
<android.support.v7.widget.AppCompatRadioButton
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:buttonTint="@color/black"
                    android:text="Radiobutton1"
                    app:buttonTint="@color/radio_button_color" />

次に、カラーresフォルダーに「radio_button_color.xml」という名前のファイルを作成します。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/yellow900" android:state_selected="true" />
    <item android:color="@color/yellow800" android:state_checked="true" />
    <item android:color="@color/gray800" android:state_enabled="false" />
    <item android:color="@color/yellow800" android:state_enabled="true" />
</selector>

2
<RadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/radio"
    android:buttonTint="@color/my_color"/>

すべてのボタンの色、丸枠、中央チェックが変わります。


1
しかし、波紋ではありません;-)
Waza_Be

1

RadioButtonは、デフォルトでres / values / colors.xmlファイルのcolorAccentの色を取ります。そのファイルに移動して、値を変更します

<color name="colorAccent">#3F51B5</color>

あなたが欲しい色に。


0

最も簡単な方法はで colourAccent色をvalues->colours.xml
変更することですが、テキストカーソルの色の編集など、他の変更も行われることに注意してください。

< color name="colorAccent">#75aeff</color >


0

クリックしたラジオボタンとクリックしていないラジオボタンに異なる色を設定する場合は、次のように使用します。

   android:buttonTint="@drawable/radiobutton"  in xml of the radiobutton and your radiobutton.xml will be:  
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="#1E88E5"/>
<item android:state_checked="true" android:color="#00e676"/>
<item android:color="#ffffff"/>



0

私はこの問題を抱えていました。アプリの背景が黒で、背景のために非表示になっているRadioButtonがたくさんある場合、それぞれのandroid:buttonTintを編集するのは複雑です。最善の解決策は、styles.xmlファイルの親テーマを変更することです。

私が変更され

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">

そのため、RadioButtonの円は明るいグレーの色合いになり、背景が黒でも表示されます。

これは私のstyle.xmlファイルです:

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>


-4

@ jh314は正しいです。AndroidManifest.xmlで、

 <application
    android:allowBackup="true"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"></application>

style.xml内

  <!-- Application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorAccent">@color/red</item>
    <!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>

アイテム名はcolorAccentである必要があり、アプリケーションのウィジェットのデフォルトの色を決定します。

しかし、コードの色を変更したい場合は、@ aknayの答えが正しいかもしれません。


これは質問に対する答えを提供しません。十分な評判られると、どの投稿にもコメントできるようになります。代わりに、質問者からの説明を必要としない回答を提供してください。- レビューから
semirturgay

私の答えは、アプリの基本色を変更することです。もちろん、ラジオボタンの色を白に変更できます。
Iturbo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.