web-dev-qa-db-de.com

Android appcompat-v7: 21.0.0 Materialfarben für Kontrollkästchen ändern

Ich habe mein Projekt aktualisiert, um die neueste Appcompat-Unterstützungsbibliothek zu verwenden. Die neue Version verwendet Kontrollkästchen für das Materialdesign und Optionsfelder. Meine App ist dunkel unterlegt und die Kontrollkästchen sind schwarz, was schwer zu erkennen ist. Ich versuche, ihre Farben entsprechend Comptaintainate Compatibility zu ändern, aber bisher funktioniert nichts.

res/values ​​/ styles.xml

  <style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light">

    <!-- customize the color palette -->
    <item name="colorAccent">@color/silver</item>
  </style>

in build.gradle:

    Android {
      compileSdkVersion 21
      buildToolsVersion '21.1.1'

      defaultConfig {
        minSdkVersion 9
        targetSdkVersion 19
      }
    }

.....
.....    

    compile 'com.Android.support:appcompat-v7:21.0.0'

AndroidManifest.xml:

  <application
      Android:name="ee.mtakso.App"
      Android:allowBackup="true"
      Android:icon="@drawable/ic_launcher"
      Android:label="@string/app_name"
      Android:theme="@style/AppBaseTheme">

Die Kontrollkästchen, editTexts, Radiobuttons usw. bleiben schwarz.

Bearbeiten

Ich weiß nicht, ob das einen großen Unterschied macht, aber die Radiobuttons und Kontrollkästchen, die ich verwende, beziehen sich auf eine CheckedTextView wie folgt:

Single (Optionsfeld):Android:checkMark="?android:attr/listChoiceIndicatorSingle"

Multi (Kontrollkästchen):Android:checkMark="?android:attr/listChoiceIndicatorMultiple"

Da diese das schwarze Material zeichnen können, glaube ich nicht, dass das Problem von ihnen kommt.

61

Ich hatte ein ähnliches Problem mit ungeprüfte CheckBoxes und RadioButtons . Ich fand die Lösung, als ich herausfand, dass Steuerelemente ihre "Aus" -Farbe von sich nehmen

<item name="Android:textColorSecondary">@color/secondary_text</item>


BEARBEITEN:

Wenn Sie angeben, ob das Thema Ihrer App oder Ihrer Aktivität eines von L's AppCompat (Dark/Light/Light.DarkActionBar) erbt, können Sie Folgendes festlegen:

<style name="SampleTheme" parent="Theme.AppCompat">
    <item name="colorAccent">@color/green</item>
    <item name="Android:textColorSecondary">@color/red</item>
</style>

Und das ist das Ergebnis:

enter image description here

Hinweis: Wenn Sie einen anderen Effekt erzielen, verwenden Sie wahrscheinlich das "false" - Design. Stellen Sie sicher, dass Sie es richtig einstellen.

122
paulina_glab

Ich glaube, das ist ein Fehler im AppCompat-Design. Mein Workaround füge jeder CheckBox in der XML-Layoutdatei zwei Codezeilen hinzu.

Android:button="@drawable/abc_btn_check_material"
Android:buttonTint="@color/colorAccent"

Sie möchten nie wirklich abc_ drawables referenzieren, aber in diesem Fall habe ich keine andere Lösung gefunden.

Dies gilt auch für das RadioButton-Widget! Sie würden einfach .__ verwenden. abc_btn_radio_material anstelle von abc_btn_check_material

35
Codeversed

Ich habe dies getan, um zumindest den Rand eines Kontrollkästchens zu ändern:

<style name="checkBoxComponent" parent="AppTheme">
    //Checked color
    <item name="colorAccent">@color/blueBackground</item> 
    //Checkbox border color
    <item name="Android:textColorSecondary">@color/grayBorder</item> 
</style>

Und in meinem Layout

<Android.support.v7.widget.AppCompatCheckBox
                        Android:layout_width="wrap_content"
                        Android:layout_height="wrap_content"
                        Android:theme="@style/checkBoxComponent"
                        Android:text="Yay" />

Immer noch herauszufinden, wie man den Hintergrund des Kontrollkästchens bekommt ...

16
Daniel S.

Ich hatte die gleichen Probleme wie Sie ... Ich sah noch einmal auf AppCompat v21 - Materialdesign für Pre-Lollipop-Geräte!

Und ich fand diese "Alle Ihre Aktivitäten müssen von ActionBarActivity reichen, die von FragmentActivity aus der v4-Support-Bibliothek reicht, sodass Sie weiterhin Fragmente verwenden können."

Also habe ich meine Aktivität in ActionBarActivity geändert und meine Probleme gelöst. Ich hoffe, es wird auch deine lösen.

14
Tezi

Ich habe nach einer Lösung gesucht und sie gefunden. 

Schritt 1  
ActionBarActivity erweitern 

public static class MyActivity extends ActionBarActivity {
        //...
}

Schritt 2  
In Ihre Style-Datei werden zwei Werte geschrieben

<style name="MyTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="colorAccent">#009688</item>
        <item name="Android:textColorSecondary">#757575</item>
</style>

colorAccent- geprüfte Farbe 
Android: textColorSecondary- Farbe nicht markiert 

Schritt 3  
Legen Sie Ihr Design in AndroidManifest.xml fest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
          package="com.test.radiobutton"
          Android:versionCode="1"
          Android:versionName="1.0">
    <application Android:label="@string/app_name" Android:icon="@drawable/ic_launcher">

                    ....

        <activity Android:name=".activity.MyActivity "
                  Android:theme="@style/MyTheme"/>

                  .....

    </application>
</manifest>



ERGEBNIS
Android 5
Android_5
Android 4.2.2
Android_4.2.2

8
nexus700120

1. Deklarieren Sie den benutzerdefinierten Stil in Ihrer Datei styles.xml.

<style name="CustomStyledRadioButton" parent="Theme.AppCompat.Light">
    <item name="colorControlNormal">@color/red</item>
    <item name="colorControlActivated">@color/red_pressed</item>
</style>

2. Wenden Sie diesen Stil über Android: Theme-Attribut auf Ihren RadioButton an.

  <RadioButton  Android:id="@+id/rb_option1"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:checked="true"
    Android:gravity="left"
    Android:lineSpacingExtra="10dp"
    Android:padding="10dp"
    Android:text="Option1"
    Android:textColor="@color/black"
    Android:theme="@style/CustomStyledRadioButton"/>
7
Muhamed Riyas M

100% arbeiten

Erstellen Sie einfach einen Stil für Ihren RadioButton und ändern Sie colorAccent wie folgt:

<style name="RadioButtonTeal" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorAccent">@color/md_teal_600</item>
</style>

Dann fügen Sie einfach diesen Stil zu Ihrem AppCompatRadioButton hinzu:

<Android.support.v7.widget.AppCompatRadioButton
     Android:layout_width="wrap_content"
     Android:layout_height="wrap_content"
     Android:theme="@style/RadioButtonTeal" />

Um Farben festzulegen, überschreiben Sie:

für geprüfte Farbe:

<item name="Android:colorControlActivated">@color/your_color</item> 

für ungeprüfte Farbe:

<item name="Android:colorControlNormal">@color/your_color</item>
4
YTerle

Sie erhalten viele Probleme mit der Kompatibilitätsbibliothek sowohl mit Kontrollkästchen als auch mit Optionsfeldern.

1) Sie sind nur in Schwarz für Android 4.x-Geräte verfügbar. Sie kommen in Android 5.x und 2.x in Ordnung (frag mich nicht, warum es auf 2.x funktioniert, habe keine Ahnung).

2) Sie haben keinen deaktivierten Status (spielt keine Rolle, wenn alle Kontrollkästchen aktiviert sind, andernfalls sind Sie gut für eine böse Überraschung).

Beachten Sie, dass der Standardhintergrund für dunkle Motive grau und nicht schwarz ist. Wenn Sie die Standardeinstellung beibehalten, ist dies "ok".

Um dieses Problem zu lösen, habe ich die weiße und eine deaktivierte Version der folgenden Drawables erstellt, die alle zu meinem Kernprojekt hinzugefügt wurden, jedoch nicht zum Compat-Projekt (aus offensichtlichen Wartungsgründen):

abc_btn_check_to_on_mtrl_000
abc_btn_check_to_on_mtrl_015
abc_btn_radio_to_on_mtrl_000
abc_btn_radio_to_on_mtrl_015

Dann wurde ein Zeichen erstellt, mit dem alle Status verwaltet werden können (um den ursprünglichen Status zu überschreiben):

Das dunkle Thema verwendet beispielsweise Folgendes:

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_enabled="false" Android:state_checked="true" Android:drawable="@drawable/abc_btn_check_to_on_mtrl_015_disabled" />
    <item Android:state_enabled="true" Android:state_checked="true" Android:drawable="@drawable/abc_btn_check_to_on_mtrl_015" />
    <item Android:state_enabled="true" Android:drawable="@drawable/abc_btn_check_to_on_mtrl_000" />
    <item Android:drawable="@drawable/abc_btn_check_to_on_mtrl_000_disabled" />
</selector>

Das Lichtdesign verwendet dies (der Benutzer kann das Design in meiner App wechseln):

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_enabled="false" Android:state_checked="true" Android:drawable="@drawable/abc_btn_check_to_on_mtrl_015_disabled" />
    <item Android:state_enabled="true" Android:state_checked="true" Android:drawable="@drawable/abc_btn_check_to_on_mtrl_015_light" />
    <item Android:state_enabled="true" Android:drawable="@drawable/abc_btn_check_to_on_mtrl_000_light" />
    <item Android:drawable="@drawable/abc_btn_check_to_on_mtrl_000_disabled" />
</selector>

Dann musste ich nur noch das Standardmath-Thema überschreiben (sowohl Aktivität als auch Dialog für beide Hell-/Dunkelmotive) und Folgendes hinzufügen:

    <item name="Android:listChoiceIndicatorSingle">@drawable/abc_btn_radio_material</item>
    <item name="Android:listChoiceIndicatorMultiple">@drawable/abc_btn_check_material</item>

Und das für leichte Themen:

    <item name="Android:listChoiceIndicatorSingle">@drawable/abc_btn_radio_material_light</item>
    <item name="Android:listChoiceIndicatorMultiple">@drawable/abc_btn_check_material_light</item>

Jetzt habe ich voll funktionsfähige Kontrollkästchen und Funkgeräte für jede Android-Version! IMO Die Compat-Bibliothek wurde überhaupt nicht für dunkle Motive getestet, es wurden nur weiße Motive verwendet. Der deaktivierte Zustand wird wahrscheinlich auch niemals vom Entwickler der kompatiblen Bibliothek verwendet.

3
3c71

Erweitern Sie einfach die ActionBarActivity wie folgt: 

Public class MainActivity extends ActionBarActivity {

//...

}
2
Leebeedev

Wenn Sie eine bestimmte Hintergrundfarbe des Kontrollkästchens ändern möchten (nicht die gesamte App), können Sie diesen Trick ausprobieren:

Erstellen Sie die Datei custom_checkbox.xml für den Hintergrund im Zeichnungsordner:

 <shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
     <stroke Android:width="14dp" Android:color="@Android:color/transparent"  />
     <solid Android:color="#ffffff" /> //the intended color of the background
     <corners Android:radius="2dp" />
 </shape> 

und dann als Hintergrund für das Kontrollkästchen festlegen:

<CheckBox
    Android:id="@+id/rebate_tnc_checkbox"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:background="@drawable/custom_checkbox" />
1
Kharda

Was Sie getan haben, sollte laut Android-Blogpost funktionieren:

colorAccent : Helle Ergänzung zur primären Brandingfarbe. Standardmäßig ist dies die Farbe, die auf Framework-Steuerelemente angewendet wird (über colorControlActivated).

colorControlActivated : Die auf Framework-Steuerelemente angewendete Farbe in ihrem aktivierten Status (z. B. aktiviert). 

Vielleicht kommt das Problem von Ihrem Theme, das @ style/Theme.AppCompat.Light als übergeordnetes Element hat, versuchen Sie es mit Theme.AppCompat: 

<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
    <!-- customize the color palette -->
    <item name="colorAccent">@color/silver</item>
</style>
1
Gaëtan M.

sie können ein anderes Design an das Konstrukt des Alarmdialogfelds übergeben 

<style name="RadioButton" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorControlNormal">@color/red</item>
    <item name="colorControlActivated">@color/green</item>
</style>

und verwenden Sie diesen Stil im Konstruktor

new AlertDialog.Builder(getContext(), R.style.RadioButton);
1
SjoerdvGestel

Das übergeordnete Element Ihrer AppTheme ist @style/Theme.AppCompat.Light.

Ändern Sie es in @style/Theme.AppCompat.

Jetzt sind Ihre Steuerelemente auf dunklem Hintergrund hell.

0
Mark Buikema

Wenn Sie versuchen, eine ComboBox von Hand zu erstellen (neue ComboBox () ...), werden sie unabhängig von den Einstellungen immer schwarz angezeigt. Es ist klar, dass die kompatible Bibliothek defekt ist. Dazu habe ich einen Fehlerbericht erstellt: https://code.google.com/p/Android/issues/detail?id=158020

0
Martin Vysny

Ich verwende appcompat library v21:

<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">@color/custom_color</item>
        <item name="colorAccent">@color/custom_color</item>    
</style>

Bei dem obigen Stil erscheint mein Kontrollkästchen mit Materialdesign (getestet unter Android 5, 4.3, 4.1.1), unter Android 2.3.3 jedoch mit dem alten Kontrollkästchen.

0
Kinga l

Hinzufügen

<item name="Android:textColorSecondary">@color/secondary_text</item>

in style.xml und style.xml (v21)

0
touchchandra

fügen Sie diese Syntax hinzu, um ein Widget wie Kontrollkästchen oder Optionsfeld zu färben.

0
Mayank Metha