it-swarm.com.de

Wie ändere ich die Standard-Textfarbe mithilfe eines benutzerdefinierten Designs?

Was ich versuche, sollte mit Themen recht einfach sein, aber ich kann nicht herausfinden, wie es geht: Ich möchte, dass der gesamte Text in meiner App standardmäßig weiß ist. Ich habe ein benutzerdefiniertes Thema in theme.xml erstellt:

<style name="Theme" parent="@Android:Theme">
</style>

<style name="TextAppearance.Theme" parent="@Android:TextAppearance.Theme">
    <item name="Android:textColor">#ffffffff</item>
</style>

und setze es für die ganze Anwendung:

<application
    Android:icon="@drawable/icon"
    Android:label="@string/app_name"
    Android:theme="@style/Theme">

Aber die Etiketten sind immer noch schwarz. Was fehlt?

PS: Wie kann ich zusätzlich Stile für verschiedene Textgrößen definieren, die pro Widget angewendet werden sollen? Ist so etwas richtig?

<style name="Theme.smallText">
    <item name="Android:textSize">12dp</item>
</style>

update

Ich habe mir themes.xml im Android SDK angesehen, es zeigt, wie der Textstil für ein Thema festgelegt wird:

<item name="textAppearance">@Android:style/TextAppearance</item>

In meinem Fall sollte es mit dieser Definition funktionieren:

<style name="Theme" parent="@Android:Theme">
    <item name="Android:textAppearance">@style/MyText</item>
</style>

<style name="MyText" parent="@Android:style/TextAppearance">
    <item name="Android:textColor">#ffffffff</item>
</style>

Funktioniert aber immer noch nicht.

Wir haben gerade einen weiteren Beitrag für dasselbe Problem gefunden: http://groups.google.com/group/Android-developers/browse_thread/thread/2897ccd0884546b9

54
didi_X8

In Ihrem Manifest müssen Sie auf den Namen des style verweisen, in dem sich die Textfarbe item befindet. Im Moment verweisen Sie nur auf ein leeres style. Also mache in deiner theme.xml nur dieses style:

<style name="Theme" parent="@Android:style/TextAppearance">
    <item name="Android:textColor">#ffffffff</item>
</style>

Und behalte dir im Manifest den gleichen Verweis (Android:theme="@style/Theme")

EDIT :

theme.xml:

<style name="MyTheme" parent="@Android:style/TextAppearance">
    <item name="Android:textColor">#ffffffff</item>
    <item name="Android:textSize">12dp</item>
</style>

Manifest:

<application
    Android:icon="@drawable/icon"
    Android:label="@string/app_name"
    Android:theme="@style/MyTheme">

Beachten Sie, dass ich die Textfarbe und -größe in demselben style kombiniere. Außerdem habe ich den Namen des Themas in MyTheme geändert und beziehe mich jetzt auf das in Manifest. Und ich wechselte zu @Android:style/TextAppearance für den parent Wert.

51
koopaking3

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. Nachfolgend finden Sie eine Referenz der nativen Stile: https://Android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/themes.xml

Der Standard-Stil Android) wird auch als „Theme“ bezeichnet. Wenn Sie ihn als Theme bezeichnen, hat dies das Programm wahrscheinlich verwirrt.

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">
41
Gene

Sie können @Android:style/TextAppearance Nicht als übergeordnetes Element für das gesamte App-Thema verwenden. das ist der Grund, warum koopaking3s Lösung ziemlich kaputt scheint.

Um Standardtextfarbe überall in Ihrer App ändern ein benutzerdefiniertes Thema zu verwenden, versuchen Sie etwas wie dieses. Funktioniert mindestens auf Android 4.0+ (API-Level 14+).

res/values/themes.xml:

<resources>    
    <style name="MyAppTheme" parent="Android:Theme.Holo.Light">
        <!-- Change default text colour from dark grey to black -->
        <item name="Android:textColor">@Android:color/black</item>
    </style>
</resources>

Manifest:

<application
    ...
    Android:theme="@style/MyAppTheme">

Aktualisieren

Ein Nachteil des oben Gesagten ist, dass auch deaktiviert Aktionsleisten-Überlaufmenüelemente die Standardfarbe verwenden, anstatt ausgegraut zu werden. (Wenn Sie in Ihrer App keine deaktivierten Menüelemente verwenden, spielt dies möglicherweise keine Rolle.)

Wie ich gelernt habe indem ich diese Frage gestellt habe , ist ein besserer Weg, die Farbe mit drawable zu definieren:

<item name="Android:textColor">@drawable/default_text_color</item>

... wobei res/drawable/default_text_color.xml eine separate state_enabled="false" Farbe angibt:

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_enabled="false" Android:color="@Android:color/darker_gray"/>
    <item Android:color="@Android:color/black"/>
</selector>
18
Jonik

Überprüfen Sie, ob Ihr Aktivitätslayout das Thema überschreibt , suchen Sie nach Ihrem Aktivitätslayout unter layout/*your_activity*.xml Und suchen Sie nach TextView = das enthält Android:textColor="(some hex code") so etwas auf dem Aktivitätslayout, und entfernen Sie es. Führen Sie dann Ihren Code erneut aus.

1
clouu