Die Hintergrundfarbe der Android-Schaltfläche ändert sich nicht

Lesezeit: 8 Minuten

Benutzer-Avatar
Sven van den Boogaart

In diesem Android-Projekt erstelle ich einen Standard-Schaltflächenstil. meine Styles.xml

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:buttonStyle">@style/ButtonStlye123</item>
</style>

<style name="ButtonStlye123" parent="android:style/Widget.Button">
    <item name="android:textSize">19dp</item>
    <item name="android:layout_margin">8dp</item>
    <item name="android:padding">8dp</item>
    <item name="android:textColor">@color/ColorDivider</item>

    <item name="android:background">@color/ColorAccent</item>
</style>

mein Knopf in einem Fragment.

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/btnLogin"
    android:id="@+id/btn_login"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:theme="@style/ButtonStlye123"
    android:onClick="login" />

In der Vorschau in Android Studio sieht es genau so aus, wie ich es möchte, aber wenn ich die App auf meinem Gerät ausführe, ist die Hintergrundfarbe grau (“Standard-Schaltflächenfarbe”). Wenn ich die Textfarbe in meiner styles.xml ändere wie:

<item name="android:textColor">@color/ColorPrimary</item>

es ändert sich (auch auf meinem Gerät), also wird der benutzerdefinierte Stil geladen, ich habe verschiedene Farben (die für den Text funktionierten) für die Schaltfläche ausprobiert, aber es ändert sich nicht.

Warum wird meine Hintergrundfarbe nicht geladen?

  • Sind Sie sicher, dass der Stilname “buttonstyle123” und in Ihrem Button “questbuttonstyle” nicht gleich sein sollten?

    – allzu verwirrend, deshalb schlafen

    6. August 2015 um 14:28 Uhr

  • @alltooconfusingthereforesleep ja sollten sie, Tippfehler beim Platzieren hier. sie sind die gleichen in meiner App

    – Sven van den Boogaart

    6. August 2015 um 14:28 Uhr

  • VERSUCHEN: android:style=”@style/ButtonStlye123″ (anstelle von “theme”)

    – Popel

    6. August 2015 um 14:30 Uhr

  • Stile sind für Komponenten und Designs für Apps (oder globale Attribute). Sie unterscheiden sich im Konzept (nicht sicher, ob sie sich in der Ausführung unterscheiden)

    – Popel

    6. August 2015 um 14:31 Uhr

  • Hintergrund ändernFarbton

    – mahdi

    19. Oktober 2020 um 14:25 Uhr

Benutzer-Avatar
Hezy Ziv

Versuchen Sie stattdessen, AppCompactButton zu verwenden

<Button

verwenden

<androidx.appcompat.widget.AppCompatButton

das wird den Trick tun

Aktualisierung: 01.06.2021

Habe herausgefunden, dass das obige auf früheren Android-Versionen nicht funktioniert. Für Materialdesign Button verwenden

app:backgroundTint="@color/green"

  • Interessanterweise funktionierten bei mir sogar die Einstellungen “android:background” direkt auf dem Button nicht. Aber es funktioniert für AppCompatButton. Ich denke, es hat etwas mit der Art und Weise zu tun, wie AppCompatActivity und einfache Aktivität gestaltet sind … Jedenfalls funktioniert diese Lösung für mich (mit AppCompatActivity).

    – Dmitrij Semikin

    2. Dezember 2020 um 10:35 Uhr

  • Es funktionierte. Aber ich verstehe den Grund dafür nicht.

    – Ein Mann

    23. Dezember 2020 um 14:45 Uhr

  • Scheint, dass für einen Button die im App-Design definierte Primärfarbe Vorrang vor jedem benutzerdefinierten Hintergrund hat, den Sie auf einen Button anwenden möchten, aber das ist bei AppCompatButton nicht der Fall. Ich bin mir nicht sicher, ob dies ein Fehler oder eine Funktion von Android ist

    – ceyquem

    5. Januar 2021 um 3:06 Uhr


  • backdroundTint hat bei mir funktioniert, danke Kumpel.

    – thesamoanppprogrammer

    2. Mai 2021 um 11:06 Uhr

  • Hat gut funktioniert, ich denke, wir bewegen uns schrittweise von Button zu AppCompatButton

    – Vin Shaba

    13. August 2021 um 13:27 Uhr

Bitte verwende androidx.appcompat.widget.AppCompatButton statt Taste.

  <androidx.appcompat.widget.AppCompatButton
        android:id="@+id/button_id_Login"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/textInnputLayout_editText_id_password"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="50dp"
        android:text="@string/Login_screen_button_text"
        android:background="@drawable/login_button_style"
        android:textAllCaps="false">
    </androidx.appcompat.widget.AppCompatButton>

  • Dieser hat mein Problem gelöst … Verwenden Sie nicht > Button

    – Maduro

    26. August 2021 um 16:29 Uhr

Benutzer-Avatar
Hor Chanpheng

Sie verwenden möglicherweise targetSdkVersion 30 Materielles Thema

Die Lösung heißt Veränderung theme.xml Stil

Aus

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">

Zu

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

  • Das hat mir das Leben gerettet. Wie 3 Tage, um das Problem zu finden. Vielen Dank.

    – hmartinezd

    12. November 2021 um 21:37 Uhr

  • @hmartinezd: Gern geschehen ^^

    – Hor Chanpheng

    22. November 2021 um 3:42 Uhr

  • Danke, aber warum passiert das?

    – Web.11

    25. April um 10:00 Uhr

  • @Web.11: Da die neueste Version von Android Studio automatisch das Materialthema verwendet, wird die Schaltfläche mit diesen Designkomponenten angewendet. Alternativ können Sie stattdessen androidx.appcompat.widget.AppCompatButton verwenden oder das übergeordnete Design in Theme.AppCompat.Light.NoActionBar ändern.

    – Hor Chanpheng

    25. April um 10:17 Uhr


<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">

Ersetzen mit

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

Das Ändern von MaterialComponents zu AppCompat funktioniert für mich.

Ich denke, Sie müssen Ihr Attribut von “Thema” auf “Stil” ändern. Diese Dateien sind für unterschiedliche Zwecke gedacht und werden daher unterschiedlich verwendet.

Style wird verwendet, um einzelnen Ansichten oder Komponenten Attribute zuzuweisen, und Theme wird verwendet, um Attribute auf die gesamte App anzuwenden.

Probieren Sie stattdessen Folgendes aus:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/btnLogin"
    android:id="@+id/btn_login"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    <!-- This attribute was changed -->        
    android:style="@style/ButtonStlye123"
    android:onClick="login" />

Sie sollten diese unterschiedlichen XML-Typen auch nach Bedarf in die richtigen Dateien aufteilen (styles.xml und themes.xml – anstatt sie alle in derselben Datei zu behalten). Dies ist eine Konvention und wirkt sich nicht auf die Codekompilierung oder -ausführung aus, wird jedoch als Codestil empfohlen.

  • Ist es möglich, automatisch auf alle Schaltflächen anzuwenden?

    – Sven van den Boogaart

    7. August 2015 um 10:46 Uhr

  • Wenn Sie einen Stil universell anwenden möchten, müssen Sie eine Java-Klasse (von Ihnen selbst erstellt) erstellen, die die Button-Klasse erweitert, und dann den Stil in dieser Java-Klasse zuweisen. Andernfalls gibt es keine integrierte Möglichkeit, einen bestimmten Stil universell anzuwenden. Sie KÖNNEN viele Attribute in den Stil einfügen (einschließlich Breite, Höhe usw.), also ist dies eine Möglichkeit, dieses Zeug zu zentralisieren (auch hier müssen Sie das angeben Stil Attribut in XML manuell (keine Möglichkeit, dies automatisch zu tun)

    – Popel

    7. August 2015 um 13:11 Uhr

  • Ich versuche diese stackoverflow.com/questions/2410836/… Lösung, aber ich kann sie nicht zum Laufen bringen

    – Sven van den Boogaart

    7. August 2015 um 13:17 Uhr

  • Ich habe das noch nie benutzt. Ich denke, es ist einfach genug, das style-Attribut einfach auf jede Ansicht in XML anzuwenden (das muss nicht universell angewendet werden).

    – Popel

    7. August 2015 um 15:09 Uhr

Benutzer-Avatar
Samer Kasseb

Wenn Sie Android Studio Version 4.1 und höher (Beta) verwenden, überprüfen Sie Ihre themes.xml-Datei in den Werten.

<style name="Theme.NavaFlashLightV4" parent="Theme.MaterialComponents.DayNight.NoActionBar">
        <!-- Primary brand color. -->
        <item name="colorPrimary">@color/purple_500</item>
        <item name="colorPrimaryVariant">@color/purple_700</item>
        <item name="colorOnPrimary">@color/white</item>
</style>

Ändern Sie das Attribut in @null

<style name="Theme.NavaFlashLightV4" parent="Theme.MaterialComponents.DayNight.NoActionBar">
            <!-- Primary brand color. -->
            <item name="colorPrimary">@null</item> <!-- HERE -->
            <item name="colorPrimaryVariant">@color/purple_700</item>
            <item name="colorOnPrimary">@color/white</item>
    </style>

für andere alte Versionen von Android Studio

ändern Sie einfach dieses Attribut

<item name="colorPrimary">@color/colorPrimary</item>

zu

        <item name="colorPrimary">@color/@null</item>

Stellen Sie schließlich den Hintergrund der Schaltfläche auf das gewünschte Zeichensymbol ein. Beispiel:

<Button
        android:id="@+id/btnSwitch"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:background="@drawable/ic_launcher_background" /> <!--the drawable you want-->

  • Ist es möglich, automatisch auf alle Schaltflächen anzuwenden?

    – Sven van den Boogaart

    7. August 2015 um 10:46 Uhr

  • Wenn Sie einen Stil universell anwenden möchten, müssen Sie eine Java-Klasse (von Ihnen selbst erstellt) erstellen, die die Button-Klasse erweitert, und dann den Stil in dieser Java-Klasse zuweisen. Andernfalls gibt es keine integrierte Möglichkeit, einen bestimmten Stil universell anzuwenden. Sie KÖNNEN viele Attribute in den Stil einfügen (einschließlich Breite, Höhe usw.), also ist dies eine Möglichkeit, dieses Zeug zu zentralisieren (auch hier müssen Sie das angeben Stil Attribut in XML manuell (keine Möglichkeit, dies automatisch zu tun)

    – Popel

    7. August 2015 um 13:11 Uhr

  • Ich versuche diese stackoverflow.com/questions/2410836/… Lösung, aber ich kann sie nicht zum Laufen bringen

    – Sven van den Boogaart

    7. August 2015 um 13:17 Uhr

  • Ich habe das noch nie benutzt. Ich denke, es ist einfach genug, das style-Attribut einfach auf jede Ansicht in XML anzuwenden (das muss nicht universell angewendet werden).

    – Popel

    7. August 2015 um 15:09 Uhr

Sie müssen nur Ihr App-Design von ändern Theme.MaterialComponents.DayNight.DarkActionBar zu Theme.AppCompat.Light.NoActionBar innerhalb der Datei styles.xml

Beispiel :

aus : style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar"

Zu : style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"

1184190cookie-checkDie Hintergrundfarbe der Android-Schaltfläche ändert sich nicht

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy