2015-02-03 23 views
12

Uso Android Studio. Ho bisogno di cambiare il colore del pulsante radio, dopo aver modificato il valore del colore del pulsante Tinta su quello che mi serve, funziona sull'anteprima, ma ogni volta che avvio l'app su un dispositivo il pulsante è il colore standard verde/blu.Impossibile modificare il colore del pulsante di scelta su Android

Si tratta di un problema di livello API del dispositivo? In tal caso, è possibile cambiare il colore per i dispositivi più vecchi?

risposta

2

Supponendo che si sta utilizzando appcompat nel vostro app basta aggiungere il seguente entro styles.xml

<item name="colorAccent">@color/blue</item> 

Ora blu colorAccent sarà impostato, basta cambiare il colore di qualsiasi colore desiderato.

Per esempio, l'intera style.xml

<resources> 
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
     <item name="colorPrimary">@color/accent_material_dark</item> 
     <item name="colorPrimaryDark">@color/accent_color_dark</item> 
     <item name="colorAccent">@color/accent_color</item> 
     <item name="windowActionBar">false</item> 
    </style> 
</resources> 
+0

marchio @victor freg risposto se la mia risposta ti ha aiutato in modo che aiuta gli altri utenti – Psypher

17

Dopo aver letto la risposta di @ Ranjith ho fatto un po 'scavare e questo sembrava funzionare. Basta aggiungerlo al tuo AppTheme.

//red is the color of the pressed state and activated state 
    <item name="colorControlActivated">@android:color/holo_red_light</item> 
    //black is the color of the normal state 
    <item name="colorControlNormal">@android:color/black</item> 

La mia domanda è come si fa a livello di programmazione in quanto ho pulsanti di scelta dinamici?

5
RadioButton raPrivate = (RadioButton) layout.findViewById(R.id.radioPrivate); 
int textColor = Color.parseColor(#000000); 
raPrivate.setButtonTintList(ColorStateList.valueOf(textColor)); 
+10

Sembra che il buttonTint viene utilizzato solo in API 21 e oltre. Qualche idea su cosa usare prima? – AdamMc331

+1

@ McAdam331 per favore vedi [la mia risposta sotto] (http://stackoverflow.com/a/40892467/1276636). – Sufian

+0

dopo varie risposte non riuscite, questa risposta più "AppCompatRadioButton" è LA risposta. Grazie – voghDev

3

Nessun ulteriore stile. Android lo supporta tramite xml. Basta aggiungere android: buttonTint = "@ color/yourColor" nel tuo pulsante di opzione.

Ad es.

<RadioButton 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:buttonTint="@color/red" 
android:text="Upload" 
android:textColor="@color/text_dark_gray" 
android:textSize="14sp" /> 
0
//red is the color of the pressed state and activated state 
<item name="colorControlActivated">@android:color/holo_red_light</item> 
//black is the color of the normal state 
<item name="colorControlNormal">@android:color/black</item> 

Da: user2968401

Una volta che avete stili diversi per il pulsante di opzione è possibile scambiare assegnandoli ad un nuovo pulsante di scelta con lo stile già impostato al nuovo stile:

(RadioButton)layout.findViewById(R.id.radioButton) = new RadioButton(this, null, R.style.RadioButton_style); 
1

ho fatto in questo modo:

Schermata

enter image description here

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 Buttonn 
     */ 
     RadioButton radioButtonAndroid = (RadioButton) getLayoutInflater().inflate(R.layout.custom_radiobutton, null); 
     radioButtonAndroid.setText("Hello Android"); 
     radioGroup.addView(radioButtonAndroid); 

     /** 
     * Second Radio Buttonn 
     */ 
     RadioButton radioButtonIos = (RadioButton) getLayoutInflater().inflate(R.layout.custom_radiobutton, null); 
     radioButtonIos.setText("Hello Ios"); 
     radioGroup.addView(radioButtonIos); 
    } 
} 

custom_radiobutton.xml

0.123.
<?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=""> 

</RadioButton> 

Spero che questo ti possa aiutare.

3

Se si desidera cambiare il colore, ma non cambia colorControlActivated e colorControlNormal per l'intera applicazione, è possibile ignorare il vostro apptheme solo per il pulsante di opzione con la creazione di un nuovo stile:

<android.support.v7.widget.AppCompatRadioButton 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerVertical="true" 
    android:layout_alignParentEnd="true" 
    android:theme="@style/RadioButtonTheme" 
    android:id="@+id/radioButton"/> 



<style name="RadioButtonTheme" parent="@style/AppTheme"> 
    <item name="colorControlActivated">@color/colorAccent</item> 
    <item name="colorControlNormal">@color/colorPrimaryDark</item> 
</style> 
9

Questo può essere fatto in due modi (per sostenere pre-Lollipop):

  1. Utilizzare AppCompatRadioButton:

    AppCompatRadioButton radioButton; 
    // now use following methods to set tint colour 
    radioButton.setSupportButtonTintMode(); 
    radioButton.setSupportButtonTintList(); 
    
  2. Applicare questo come stile al vostro RadioButton in XML:

    <style name="RadioButton.Login" parent="Widget.AppCompat.CompoundButton.RadioButton"> 
        <item name="android:textColor">@android:color/white</item> 
        <item name="buttonTint">@android:color/white</item> 
    </style> 
    
+1

Risposta piacevole, grazie per aver incluso il supporto per la compatibilità con le versioni precedenti. – AdamMc331

Problemi correlati