Frage

In meiner Android-Anwendung mag ich die Standard / Grundtitelleiste Farbe ändern.

Um die Textfarbe Sie setTitleColor(int color) haben zu ändern, ist es eine Möglichkeit, die Hintergrundfarbe des Balkens zu ändern?

War es hilfreich?

Lösung

Der Thread werden Sie mit dem Aufbau Ihre eigene Titelleiste in einer XML-Datei erhalten begonnen und es in Ihren Aktivitäten mit

Bearbeiten

Hier ist eine kurze Zusammenfassung des Inhalts des Link oben - Dies ist nur , um die Farbe des Textes zu setzen und den Hintergrund der Titelleiste - keine Größenänderung, keine Tasten, sondern nur die simpliest Probe

res / layout / mytitle.xml - Dies ist die Ansicht, dass 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 / Werte / themes.xml - Wir wollen die Standard-Android-Thema halten und müssen nur die Hintergrundfarbe des Titel Hintergrund ändern. Also haben wir ein Thema, das erbt die Standard-Theme und den Hintergrund Stil zu unserem eigenen Stil erstellen.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="customTheme" parent="android:Theme"> 
        <item name="android:windowTitleBackgroundStyle">@style/WindowTitleBackground</item>   
    </style> 
</resources>

res / Werte / styles.xml - Dies ist, wo wir das Thema setzen Sie die Farbe, die wir für den Titel Hintergrund verwenden möchten

<?xml version="1.0" encoding="utf-8"?>
<resources> 
   <style name="WindowTitleBackground">     
        <item name="android:background">@color/titlebackgroundcolor</item>                   
    </style>
</resources>

res / Werte / Colors.xml - Legen Sie hier die gewünschte Farbe

<?xml version="1.0" encoding="utf-8"?>
<resources>   
    <color name="titlebackgroundcolor">#3232CD</color>
    <color name="titletextcolor">#FFFF00</color>
</resources>

In der AndroidManifest.xml , das Thema Attribut entweder in der Anwendung festgelegt (für die gesamte Anwendung) oder in der Aktivität (nur diese Aktivität) Tags

<activity android:name=".CustomTitleBar" android:theme="@style/customTheme" ...

Von der Aktivität (so genannte CustomTitleBar):

@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);

}

Andere Tipps

Vielen Dank für diese klare Erklärung, aber Ich mag wäre ein bisschen mehr auf Ihre Antwort hinzufügen, indem Sie eine verknüpfte Frage zu stellen (nicht wirklich will einen neuen Posten als dies tun, ist der Keller auf meiner Frage).

Ich erkläre meine titlebar in einer Oberklasse, aus dem alle meine anderen Tätigkeiten Kinder sind, haben die Farbe der Bar nur einmal zu ändern. Ich möchte auch ein Symbol hinzufügen und den Text in der Bar ändern. Ich habe einige Tests durchgeführt, und die Kontrolle der Änderung entweder das eine oder das andere, aber nicht beides zugleich (mit setFeatureDrawable und setTitle). Die ideale Lösung wäre natürlich die Erklärung in den in der Verbindung gegeben Fäden zu folgen, aber als ich in einer übergeordneten Klasse bin erklärt, habe ich ein Problem aufgrund des Layouts in setContentView und dem R.id.myCustomBar, denn wenn i erinnere mich gut, ich kann setContentView nennen nur einmal ...

Bearbeiten Gefunden meine Antwort:

Für diejenigen, die, wie ich, wie an der Arbeit mit übergeordneten Klassen, weil es groß ist, um ein Menü für immer überall verfügbar in einer App, es funktioniert hier das gleiche.

Fügen Sie einfach diese zu Ihrer Superklasse:

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 haben die Textview als geschützten Klassenvariable zu deklarieren)

Und dann die Kraft dieser das heißt, überall in Sie app (wenn zum Beispiel alle Ihre Aktivitäten Kinder dieser Klasse sind), Sie müssen nur anrufen

customTitleText.setText("Whatever you want in title");

und Ihre titlebar bearbeitet werden.

Die XML in meinem Fall zugeordnet ist (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 einen anderen Weg, um die Hintergrundfarbe zu ändern, aber es ist ein Hack ist und möglicherweise auf zukünftige Versionen von Android fehlschlagen, wenn die View-Hierarchie des Fensters und der Titel geändert wird. Allerdings wird der Code nicht abstürzen, nur vermisse die gewünschte Farbe einstellen, in einem solchen Fall.

Ihre Aktivität, wie onCreate, tun:

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));
  }
}
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);
      }
    }

auf obigen Code können Sie versuchen Sie verwenden können Titel statt titlebar dies auf alle Aktivitäten in Ihrer Anwendung beeinflussen

Dieser Code hilft dem Hintergrund der Titelleiste in Android programmatisch zu ändern. Ändern Sie die Farbe zu jeder Farbe, die Sie wollen.

public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout);
    getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#1c2833")));

}

nehme ich nicht. Sie können Titleless Aktivität erstellen und Ihre eigene Titelleiste in der Aktivität Layout erstellen.

Überprüfen diese , Linie 63 und unter:

getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_1)

Sätze Custom statt Standardtitelansicht.

Werfen Sie einen Blick in platforms/android-2.1/data/res/layout/screen.xml des SDK. Es scheint, dass es einen Titel zu definieren. Sie können häufig Layouts wie diese untersuchen und leihen die             style="?android:attr/windowTitleStyle" Stile, die Sie dann in Ihrer eigenen Textviews verwenden und außer Kraft setzen.

Unter Umständen können Sie sogar den Titel für den direkten Zwicken wählen, indem Sie:

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);
      }
    }

auch diesen Link seine sehr nützlich: http: / /nathanael.hevenet.com/android-dev-changing-the-title-bar-background/

Es ist eine einfachere Alternative der Farbe der Titelleiste zu ändern, indem die v7 appcompat Support-Bibliothek unter Verwendung von Google bereitgestellt.

Sehen Sie diesen Link, wie man die Einrichtung dieser Support-Bibliothek: https: // developer.android.com/tools/support-library/setup.html

Wenn Sie das getan haben, es ist ausreichend, um die folgenden Zeilen in res / Werte / styles.xml Datei hinzufü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 res / Werte / Colors.xml definiert ist, z.

<color name="titlebackgroundcolor">#0000AA</color>

)

scheinen die Dinge besser geworden zu sein / einfacher, da Android 5.0 (API-Ebene 21).

Ich denke, was Sie suchen ist so etwas wie folgt aus:

<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>

Sehen Sie hier als Referenz:

https://developer.android.com/training/material/theme .html # Colorpalette

Ich habe dies getan, indem Stil Farbwerte zu ändern in „res“ -> „Werte“ -> „Colors.xml“ eingeben Bild Beschreibung hier

Dies wird Farben für gesamtes Projekt ändern, das für mich in Ordnung ist.

Sie können es verwenden.

  toolbar.setTitleTextColor(getResources().getColor(R.color.white));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top