In meiner Android-Anwendung soll die Standard- / Basis-Titelleiste ihre Farbe ändern.
Gibt setTitleColor(int color)
es eine Möglichkeit, die Hintergrundfarbe der Leiste zu ändern, um die Textfarbe zu ändern?
In meiner Android-Anwendung soll die Standard- / Basis-Titelleiste ihre Farbe ändern.
Gibt setTitleColor(int color)
es eine Möglichkeit, die Hintergrundfarbe der Leiste zu ändern, um die Textfarbe zu ändern?
Antworten:
In diesem Thread können Sie zunächst eine eigene Titelleiste in einer XML-Datei erstellen und in Ihren Aktivitäten verwenden
Bearbeiten
Hier ist eine kurze Zusammenfassung des Inhalts des obigen Links - Dies dient nur zum Festlegen der Farbe des Textes und des Hintergrunds der Titelleiste - keine Größenänderung, keine Schaltflächen, nur das einfachste Beispiel
res / layout / mytitle.xml - Dies ist die Ansicht, die die Titelleiste darstellt
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myTitle"
android:text="This is my new title"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="@color/titletextcolor"
/>
res / values / theme.xml - Wir möchten das Standard-Android- Design beibehalten und müssen nur die Hintergrundfarbe des Titelhintergrunds ändern. Also erstellen wir ein Thema, das das Standardthema erbt, und setzen den Hintergrundstil auf unseren eigenen Stil.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="customTheme" parent="android:Theme">
<item name="android:windowTitleBackgroundStyle">@style/WindowTitleBackground</item>
</style>
</resources>
res / values / styles.xml - Hier legen wir das Thema so fest, dass die gewünschte Farbe für den Titelhintergrund verwendet wird
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="WindowTitleBackground">
<item name="android:background">@color/titlebackgroundcolor</item>
</style>
</resources>
res / values / color.xml - Stellen Sie hier die gewünschte Farbe ein
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="titlebackgroundcolor">#3232CD</color>
<color name="titletextcolor">#FFFF00</color>
</resources>
Legen Sie in der Datei AndroidMANIFEST.xml das Designattribut entweder in den Anwendungs-Tags (für die gesamte Anwendung) oder in den Aktivitäts-Tags (nur für diese Aktivität) fest
<activity android:name=".CustomTitleBar" android:theme="@style/customTheme" ...
Aus der Aktivität (CustomTitleBar genannt):
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.mytitle);
}
Vielen Dank für diese klare Erklärung, aber ich möchte Ihrer Antwort etwas mehr hinzufügen, indem ich eine verknüpfte Frage stelle (ich möchte nicht wirklich einen neuen Beitrag verfassen, da dieser der Keller meiner Frage ist).
Ich deklariere meine Titelleiste in einer Superklasse, aus der alle meine anderen Aktivitäten Kinder sind, um die Farbe der Leiste nur einmal ändern zu müssen. Ich möchte auch ein Symbol hinzufügen und den Text in der Leiste ändern. Ich habe einige Tests durchgeführt und es geschafft, entweder das eine oder das andere, aber nicht beide gleichzeitig zu ändern (mit setFeatureDrawable und setTitle). Die ideale Lösung wäre natürlich, der Erklärung im Thread im Link zu folgen, aber da ich in einer Oberklasse deklariere, habe ich ein Problem aufgrund des Layouts in setContentView und der R.id.myCustomBar, denn wenn i Denken Sie daran, ich kann setContentView nur einmal aufrufen ...
EDIT Meine Antwort gefunden:
Für diejenigen, die wie ich gerne mit Superklassen arbeiten, weil es großartig ist, ein Menü überall in einer App verfügbar zu machen, funktioniert es hier genauso.
Fügen Sie dies einfach Ihrer Oberklasse hinzu:
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.customtitlebar);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.customtitlebar);
customTitleText = (TextView) findViewById(R.id.customtitlebar);
(Sie müssen die Textansicht als geschützte Klassenvariable deklarieren.)
Und dann ist die Stärke davon, dass Sie überall in Ihrer App (wenn zum Beispiel alle Ihre Aktivitäten Kinder dieser Klasse sind) nur anrufen müssen
customTitleText.setText("Whatever you want in title");
und Ihre Titelleiste wird bearbeitet.
Das in meinem Fall zugeordnete XML lautet (R.layout.customtitlebar):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:background="@color/background">
<ImageView android:layout_width="25px" android:layout_height="25px"
android:src="@drawable/icontitlebar"></ImageView>
<TextView android:id="@+id/customtitlebar"
android:layout_width="wrap_content" android:layout_height="fill_parent"
android:text="" android:textColor="@color/textcolor" android:textStyle="bold"
android:background="@color/background" android:padding="3px" />
</LinearLayout>
Es gibt eine andere Möglichkeit, die Hintergrundfarbe zu ändern. Dies ist jedoch ein Hack und kann in zukünftigen Android-Versionen fehlschlagen, wenn die Ansichtshierarchie des Fensters und sein Titel geändert werden. In einem solchen Fall stürzt der Code jedoch nicht ab. Verpassen Sie einfach nicht die gewünschte Farbe.
Führen Sie in Ihrer Aktivität wie bei onCreate Folgendes aus:
View titleView = getWindow().findViewById(android.R.id.title);
if (titleView != null) {
ViewParent parent = titleView.getParent();
if (parent != null && (parent instanceof View)) {
View parentView = (View)parent;
parentView.setBackgroundColor(Color.rgb(0x88, 0x33, 0x33));
}
}
Dieser Code hilft, den Hintergrund der Titelleiste in Android programmgesteuert zu ändern. Ändern Sie die Farbe in eine beliebige Farbe.
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#1c2833")));
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
View titleView = getWindow().findViewById(android.R.id.title);
if (titleView != null) {
ViewParent parent = titleView.getParent();
if (parent != null && (parent instanceof View)) {
View parentView = (View)parent;
parentView.setBackgroundColor(Color.RED);
}
}
Mit dem obigen Code können Sie versuchen, den Titel anstelle der Titelleiste zu verwenden Dies sich auf alle Aktivitäten in Ihrer Anwendung aus
Ich nehme an nein. Sie können titellose Aktivitäten erstellen und eine eigene Titelleiste im Aktivitätslayout erstellen.
Überprüfen Sie dies , Zeile 63 und darunter:
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_1)
Legt die benutzerdefinierte Ansicht anstelle der Standardtitelansicht fest.
Werfen Sie einen Blick in platforms/android-2.1/data/res/layout/screen.xml
das SDK. Es scheint dort einen Titel zu definieren. Sie können solche Layouts häufig untersuchen und die style="?android:attr/windowTitleStyle"
Stile ausleihen
, die Sie dann verwenden und in Ihren eigenen Textansichten überschreiben können.
Möglicherweise können Sie sogar den Titel für die direkte Optimierung auswählen, indem Sie Folgendes tun:
TextView title = (TextView)findViewById(android.R.id.title);
Versuchen Sie es mit dem folgenden Code
View titleView = getWindow().findViewById(android.R.id.title);
if (titleView != null) {
ViewParent parent = titleView.getParent();
if (parent != null && (parent instanceof View)) {
View parentView = (View)parent;
parentView.setBackgroundColor(Color.RED);
}
}
Verwenden Sie auch diesen Link, der sehr nützlich ist: http://nathanael.hevenet.com/android-dev-changing-the-title-bar-background/
Es gibt eine einfachere Alternative, die Farbe der Titelleiste zu ändern, indem Sie die von Google bereitgestellte v7-Appcompat-Unterstützungsbibliothek verwenden.
Unter diesem Link erfahren Sie, wie Sie diese Support-Bibliothek einrichten : https://developer.android.com/tools/support-library/setup.html
Sobald Sie dies getan haben, reicht es aus, der Datei res / values / styles.xml die folgenden Zeilen hinzuzufügen:
<style name="AppTheme" parent="AppBaseTheme">
<item name="android:actionBarStyle">@style/ActionBar</item>
</style>
<!-- Actionbar Theme -->
<style name="ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">
<item name="android:background">@color/titlebackgroundcolor</item>
</style>
(unter der Annahme, dass "titlebackgroundcolor" in Ihrer res / values / colours.xml definiert ist, z.
<color name="titlebackgroundcolor">#0000AA</color>
)
Seit Android 5.0 (API Level 21) scheinen die Dinge besser / einfacher geworden zu sein.
Ich denke, was Sie suchen, ist ungefähr so:
<style name="AppTheme" parent="AppBaseTheme">
<!-- Top-top notification/status bar color: -->
<!--<item name="colorPrimaryDark">#000000</item>-->
<!-- App bar color: -->
<item name="colorPrimary">#0000FF</item>
</style>
Siehe hier als Referenz:
https://developer.android.com/training/material/theme.html#ColorPalette
Fügen Sie diesen Code nach setContentView oder in onCreate ein
Wenn Sie einen Farbcode haben, verwenden Sie diesen;
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#408ed4")));
Wenn Sie einen bestimmten Code aus der Farbbibliothek wünschen, verwenden Sie diesen;
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.WHITE));