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?
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?
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.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:
Erstellen Sie eine styles.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyTheme" parent="android:Theme">
<item name="android:textViewStyle">@style/MyTextViewStyle</item>
</style>
<style name="MyTextViewStyle" parent="android:Widget.TextView">
<item name="android:textColor">#F00</item>
<item name="android:textStyle">bold</item>
</style>
</resources>
Dann wenden Sie dieses Thema einfach auf Ihre Bewerbung an in AndroidManifest.xml:
<application […] android:theme="@style/MyTheme">…
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.
<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
<item name="android:textViewStyle">@style/MyTextViewStyle</item>dort ablegen, indem Sie nur auf die ActionBar-Standardeinstellung (oder etwas Ähnliches) verweisen
Es gibt zwei Möglichkeiten, dies zu tun:
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:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyRedTheme" parent="android:Theme.Light">
<item name="android:textAppearance">@style/MyRedTextAppearance</item>
</style>
<style name="MyRedTextAppearance" parent="@android:style/TextAppearance">
<item name="android:textColor">#F00</item>
<item name="android:textStyle">bold</item>
</style>
</resources>
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"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
style="@style/MyRedTheme"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="This is red, isn't it?"
/>
</LinearLayout>
Weitere Informationen finden Sie in diesem Artikel: Grundlegendes zu Android-Designs und -Stilen
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:
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.widget.TextView;
public class RedTextView extends TextView{
public RedTextView(Context context, AttributeSet attrs) {
super(context, attrs);
setTextColor(Color.RED);
}
}
Dann müssen Sie es nur noch wie gewohnt TextViewin Ihrer XML-Datei behandeln:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<org.example.RedTextView
android: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.
custom_view_layout.xmlDatei verwenden, die zum Aufblasen einer benutzerdefinierten Klasse verwendet wird?
Für Standard - Textfarbe in TextView, stellen Sie android:textColorTertiaryin Ihrem Thema auf die gewünschte Farbe:
<item name="android:textColorTertiary">@color/your_text_color</item>
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.