Angenommen, ich möchte, dass alle TextViewInstanzen in meiner App vorhanden sind textColor="#ffffff". Gibt es eine Möglichkeit, dies an einem Ort festzulegen, anstatt es für jeden TextViewfestzulegen?
Tatsächlich können Sie einen Standardstil für TextViews (und die meisten anderen integrierten Widgets) festlegen, ohne eine benutzerdefinierte Java-Klasse ausführen oder den Stil einzeln festlegen zu müssen.
Wenn Sie sich themes.xmldie Android-Quelle ansehen , sehen Sie eine Reihe von Attributen für den Standardstil für verschiedene Widgets. Der Schlüssel ist das Attribut textViewStyle(oder editTextStyleusw.), das Sie in Ihrem benutzerdefinierten Thema überschreiben. Sie können diese folgendermaßen überschreiben:
Die eleganteste Lösung, die ich bisher gesehen habe.
Italo Borssatto
@Steve, wenn ich das Element <item name="android:textViewStyle">@style/MyTextViewStyle</item>in den Stil MyTheme einbinde und dann den Stil auf meine Anwendung anwende, werden alle meine TextViews entsprechend dem Stil angezeigt (sogar der Name der Anwendung in der Aktionsleiste). Wie behebe ich die Angelegenheit mit der Aktionsleiste? Ich möchte, dass es das Standard-Erscheinungsbild hat. Github
Maksim Dmitriev
@Steve, Wie man beide (Aktionsleiste und Widget) Thema auf Anwendung
anwendet
Ich bin mir nicht sicher, wie ich die ActionBar von anderen Dingen unterscheiden soll. Möglicherweise können Sie feststellen, wo Ihr ActionBar-Stil festgelegt ist, und ihn dann auch <item name="android:textViewStyle">@style/MyTextViewStyle</item>dort ablegen, indem Sie nur auf die ActionBar-Standardeinstellung (oder etwas Ähnliches) verweisen
Steve Pomeroy
@StevePomeroy das funktioniert bei mir nicht .. kannst du etwas Support leisten. Mein Stil für die TextViews bleibt gleich. Gibt es ein Minimum an Elementen, die ich einstellen muss, oder gibt es einige Elemente, die ich nicht einstellen darf?
Mike
52
Es gibt zwei Möglichkeiten, dies zu tun:
1. Stile verwenden
Sie können Ihre eigenen Stile definieren, indem Sie XML-Dateien im res/valuesVerzeichnis erstellen . Nehmen wir also an, Sie möchten roten und fetten Text haben, und erstellen dann eine Datei mit diesem Inhalt:
Sie können es beispielsweise so benennen, wie Sie möchten res/values/red.xml. Dann müssen Sie nur noch diese Ansicht in den gewünschten Widgets verwenden, zum Beispiel:
<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextViewstyle="@style/MyRedTheme"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="This is red, isn't it?"/></LinearLayout>
Dies ist ein weiterer möglicher Weg, um dies zu erreichen, und es wäre, einen eigenen bereitzustellen TextView, der die Textfarbe immer auf das einstellt, was Sie wollen. zum Beispiel:
Dann müssen Sie es nur noch wie gewohnt TextViewin Ihrer XML-Datei behandeln:
<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><org.example.RedTextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="This is red, isn't it?"/></LinearLayout>
Ob Sie die eine oder andere Wahl treffen, hängt von Ihren Bedürfnissen ab. Wenn Sie nur das Erscheinungsbild ändern möchten, ist der beste Ansatz der erste. Wenn Sie dagegen das Erscheinungsbild ändern und Ihren Widgets neue Funktionen hinzufügen möchten, ist die zweite der richtige Weg.
Die Verwendung von benutzerdefinierten Klassen sollte bevorzugt werden, da dies einen saubereren Ansatz darstellt und dazu beiträgt, dass die XML-Datei leicht bleibt.
Amit Kumar
@AmitKumar Nein, sollten sie nicht! In diesem speziellen Fall würde dies bedeuten, für jeden unterschiedlichen Attributwert eine separate benutzerdefinierte Klasse zu verwenden. Dies erzeugt viel aufgeblähten Code und macht das eigentliche Layout nicht mehr lesbar (Sie müssen jede Klasse besuchen, um zu sehen, was sie tut, anstatt nur einige XML-Zeilen zu lesen). Benutzerdefinierte Klassen sollten nur verwendet werden, wenn Sie das Verhalten ändern, nicht jedoch, wenn die einzige Änderung das Aussehen der Ansicht ist.
Andre
Ist es nicht möglich, den Stil einer benutzerdefinierten Ansicht über XML festzulegen? Warum können wir es nicht in der custom_view_layout.xmlDatei verwenden, die zum Aufblasen einer benutzerdefinierten Klasse verwendet wird?
Lucidbrot
5
Für Standard - Textfarbe in TextView, stellen Sie android:textColorTertiaryin Ihrem Thema auf die gewünschte Farbe:
Viele andere Farben des Android-Steuerelements können mithilfe von Framework-Attributen oder Support-Bibliotheksattributen gesteuert werden, wenn Sie Support-Bibliothek verwenden.
Eine Liste der Attribute, die Sie festlegen können, finden Sie im Android-Quellcode von styles.xmlund themes.xmloder in dieser sehr hilfreichen Übersicht von Dan Lew. Versuchen Sie, jeden Wert zu ändern, und sehen Sie, was sich auf dem Bildschirm ändert.
Danke mann! Ich habe einige Zeit damit verbracht herauszufinden, warum textColorPrimary nicht funktioniert.
Pratt
3
Definieren Sie einen Stil und verwenden Sie ihn für jedes Widget, definieren Sie ein Thema, das den Android-Standard für dieses Widget überschreibt, oder definieren Sie eine Zeichenfolgenressource und verweisen Sie in jedem Widget darauf
Antworten:
Tatsächlich können Sie einen Standardstil für TextViews (und die meisten anderen integrierten Widgets) festlegen, ohne eine benutzerdefinierte Java-Klasse ausführen oder den Stil einzeln festlegen zu müssen.
Wenn Sie sich
themes.xml
die Android-Quelle ansehen , sehen Sie eine Reihe von Attributen für den Standardstil für verschiedene Widgets. Der Schlüssel ist das AttributtextViewStyle
(odereditTextStyle
usw.), das Sie in Ihrem benutzerdefinierten Thema überschreiben. Sie können diese folgendermaßen überschreiben:Erstellen Sie eine
styles.xml
:Dann wenden Sie dieses Thema einfach auf Ihre Bewerbung an in
AndroidManifest.xml
:Und alle Ihre Textansichten verwenden standardmäßig den in definierten Stil
MyTextViewStyle
(in diesem Fall fett und rot)!Dies wurde auf Geräten ab API-Level 4 getestet und scheint hervorragend zu funktionieren.
quelle
<item name="android:textViewStyle">@style/MyTextViewStyle</item>
in den Stil MyTheme einbinde und dann den Stil auf meine Anwendung anwende, werden alle meineTextView
s entsprechend dem Stil angezeigt (sogar der Name der Anwendung in der Aktionsleiste). Wie behebe ich die Angelegenheit mit der Aktionsleiste? Ich möchte, dass es das Standard-Erscheinungsbild hat. Github<item name="android:textViewStyle">@style/MyTextViewStyle</item>
dort ablegen, indem Sie nur auf die ActionBar-Standardeinstellung (oder etwas Ähnliches) verweisenEs gibt zwei Möglichkeiten, dies zu tun:
1. Stile verwenden
Sie können Ihre eigenen Stile definieren, indem Sie XML-Dateien im
res/values
Verzeichnis erstellen . Nehmen wir also an, Sie möchten roten und fetten Text haben, und erstellen dann eine Datei mit diesem Inhalt:Sie können es beispielsweise so benennen, wie Sie möchten
res/values/red.xml
. Dann müssen Sie nur noch diese Ansicht in den gewünschten Widgets verwenden, zum Beispiel:Weitere Informationen finden Sie in diesem Artikel: Grundlegendes zu Android-Designs und -Stilen
2. Verwenden von benutzerdefinierten Klassen
Dies ist ein weiterer möglicher Weg, um dies zu erreichen, und es wäre, einen eigenen bereitzustellen
TextView
, der die Textfarbe immer auf das einstellt, was Sie wollen. zum Beispiel:Dann müssen Sie es nur noch wie gewohnt
TextView
in Ihrer XML-Datei behandeln:Ob Sie die eine oder andere Wahl treffen, hängt von Ihren Bedürfnissen ab. Wenn Sie nur das Erscheinungsbild ändern möchten, ist der beste Ansatz der erste. Wenn Sie dagegen das Erscheinungsbild ändern und Ihren Widgets neue Funktionen hinzufügen möchten, ist die zweite der richtige Weg.
quelle
custom_view_layout.xml
Datei verwenden, die zum Aufblasen einer benutzerdefinierten Klasse verwendet wird?Für Standard - Textfarbe in
TextView
, stellen Sieandroid:textColorTertiary
in Ihrem Thema auf die gewünschte Farbe:Viele andere Farben des Android-Steuerelements können mithilfe von Framework-Attributen oder Support-Bibliotheksattributen gesteuert werden, wenn Sie Support-Bibliothek verwenden.
Eine Liste der Attribute, die Sie festlegen können, finden Sie im Android-Quellcode von
styles.xml
undthemes.xml
oder in dieser sehr hilfreichen Übersicht von Dan Lew. Versuchen Sie, jeden Wert zu ändern, und sehen Sie, was sich auf dem Bildschirm ändert.quelle
Definieren Sie einen Stil und verwenden Sie ihn für jedes Widget, definieren Sie ein Thema, das den Android-Standard für dieses Widget überschreibt, oder definieren Sie eine Zeichenfolgenressource und verweisen Sie in jedem Widget darauf
quelle