it-swarm.com.de

Android: Schaltflächentext und Hintergrundfarbe ändern

Wie kann ich mit xml sowohl die Text- als auch die Hintergrundfarbe ändern, wenn meine Schaltfläche gedrückt wird?

So ändern Sie die Textfarbe:

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_pressed="true" Android:color="mycolor"/>
    <item Android:color="mycolor2/>
</selector>

Ich kann den Hintergrund ändern (indem ich ihn in einem Selektor/Gegenstand mit zeichnbarer Referenz verwende):

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <solid Android:color="#FF0079FF" />
</shape>

Aber wie kann ich beides machen? Angenommen, ich möchte Folgendes haben:

  • Standard: schwarzer Text/weißer Hintergrund
  • Gedrückt: weißer Text/blauer Hintergrund

EDIT: antworte

Ich habe total vergessen, dass der Hintergrund und die Textfarbe separat verwaltet werden, also habe ich es so gemacht:

<Button
    Android:textColor="@color/filtersbuttoncolors"
    Android:background="@drawable/mybackgroundcolors" />

In mybackgroundcolors.xml verwalte ich den Hintergrund und in filtersbuttoncolors.xml die Textfarbe. In beiden XML-Dateien verwalte ich den Status (gedrückt, ausgewählt, Standard)

61
Maelig

Hier ist ein Beispiel für eine Grafik, die standardmäßig weiß und beim Drücken schwarz ist:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_pressed="true">
        <shape>
            <solid
                Android:color="#1E669B"/>
            <stroke
                Android:width="2dp"
                Android:color="#1B5E91"/>
            <corners
                Android:radius="6dp"/>
            <padding
                Android:bottom="10dp"
                Android:left="10dp"
                Android:right="10dp"
                Android:top="10dp"/>
        </shape>

    </item>
    <item>
        <shape>
            <gradient
                Android:angle="270"
                Android:endColor="#1E669B"
                Android:startColor="#1E669B"/>
            <stroke
                Android:width="4dp"
                Android:color="#1B5E91"/>
            <corners
                Android:radius="7dp"/>
            <padding
                Android:bottom="10dp"
                Android:left="10dp"
                Android:right="10dp"
                Android:top="10dp"/>
        </shape>
    </item>
</selector>
42
Mitesh Shah

Seit API Level 21 können Sie Folgendes verwenden:

Android:backgroundTint="@Android:color/white"

sie müssen dies nur in Ihrer XML-Datei hinzufügen

25
Jonsmoke

Ich denke, das ist viel einfacher:

button.setBackgroundColor(Color.BLACK);

Und du musst import Android.graphics.Color; nicht: import Android.R.color;

Oder schreiben Sie einfach den 4-Byte-Hex-Code (nicht 3-Byte) 0xFF000000 wobei das erste Byte das Alpha setzt.

23
user1718854

fügen Sie die folgende Zeile in styles.xml hinzu

<style name="AppTheme.Gray" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorButtonNormal">@color/colorGray</item>
    </style>

fügen Sie unter button Android:theme="@style/AppTheme.Gray" hinzu, Beispiel:

<Button
            Android:theme="@style/AppTheme.Gray"
            Android:textColor="@color/colorWhite"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:text="@Android:string/cancel"/>
12
Sỹ Phạm

Nur um die Antwort von @ Jonsmoke zu ergänzen.

Für API-Level 21 und höher können Sie Folgendes verwenden:

Android:backgroundTint="@Android:color/white"

in XML für das Schaltflächenlayout.

Verwenden Sie für API-Level unter 21 einen AppCompatButton mit App Namespace anstelle von Android für backgroundTint .

Zum Beispiel:

<Android.support.v7.widget.AppCompatButton
    Android:id="@+id/my_button"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="My Button"
    app:backgroundTint="@Android:color/white" />
9
Abdul Wadood

Wenn Sie eine App erstellen, wird eine Datei namens styles.xml in Ihrem Ordner res/values ​​erstellt. Wenn Sie die Stile ändern, können Sie den Hintergrund, die Textfarbe usw. für alle Ihre Layouts ändern. Auf diese Weise müssen Sie nicht in jedes einzelne Layout gehen und es manuell ändern.

styles.xml:

<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">
<style name="Theme.AppBaseTheme" parent="@Android:style/Theme.Light">
    <item name="Android:editTextColor">#295055</item> 
    <item name="Android:textColorPrimary">#295055</item>
    <item name="Android:textColorSecondary">#295055</item>
    <item name="Android:textColorTertiary">#295055</item>
    <item name="Android:textColorPrimaryInverse">#295055</item>
    <item name="Android:textColorSecondaryInverse">#295055</item>
    <item name="Android:textColorTertiaryInverse">#295055</item>

     <item name="Android:windowBackground">@drawable/custom_background</item>        
</style>

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
    <!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>

parent="@Android:style/Theme.Light" Ist Googles native Farben. Hier ist eine Referenz der nativen Stile: https://Android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/themes.xml

name="Theme.AppBaseTheme" Bedeutet, dass Sie einen Stil erstellen, der alle Stile von parent="@Android:style/Theme.Light" Übernimmt. Diesen Teil können Sie ignorieren, es sei denn, Sie möchten ihn erneut von AppBaseTheme erben. = <style name="AppTheme" parent="AppBaseTheme">

@ drawable/custom_background ist ein benutzerdefiniertes Bild, das ich in den Ordner des Drawable gelegt habe. Es ist ein 300x300 Png-Bild.

# 295055 ist eine dunkelblaue Farbe.

Mein Code ändert die Hintergrund- und Textfarbe. Den Text für die Schaltflächen finden Sie in den Google-eigenen Stilen (der Link, den ich oben angegeben habe).

Denken Sie dann daran, in Android Manifest) den Code einzuschließen:

<application
Android:theme="@style/Theme.AppBaseTheme">
3
Gene