it-swarm.com.de

ActionBar-Textfarbe

wie kann ich die Textfarbe der ActionBar ändern? Ich habe das Holo Light Theme geerbt. Ich kann den Hintergrund der ActionBar ändern, aber ich kann nicht herausfinden, was das Attribut Tweak ist, um die Textfarbe zu ändern.


Ok, ich kann die Textfarbe mit dem Attribut Android: textColorPrimary ändern, ändert jedoch auch die Textfarbe des Dropdown-Menüs, das angezeigt wird, wenn die ActionBar-Buttons überlaufen. Haben Sie eine Idee, wie Sie die Farbe des Dropdown-Menüs/der Liste ändern können?

256
rnoway

Ok, ich habe einen besseren Weg gefunden. Ich kann jetzt nur noch die Farbe des Titels ändern. Sie können auch den Untertitel anpassen.

Hier ist meine styles.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="MyTheme" parent="@Android:style/Theme.Holo.Light">
    <item name="Android:actionBarStyle">@style/MyTheme.ActionBarStyle</item>
  </style>

  <style name="MyTheme.ActionBarStyle" parent="@Android:style/Widget.Holo.Light.ActionBar">
    <item name="Android:titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
  </style>

  <style name="MyTheme.ActionBar.TitleTextStyle" parent="@Android:style/TextAppearance.Holo.Widget.ActionBar.Title">
    <item name="Android:textColor">@color/red</item>
  </style>
</resources>
434
rnoway

Ich habe einen Weg gefunden, der gut mit jeder Variante von ActionBar (Sherlock, Compat und Native) funktioniert:

Verwenden Sie einfach html, um den Titel festzulegen, und geben Sie die Textfarbe an. Um beispielsweise die Textfarbe für ActionBar auf Rot zu setzen, führen Sie einfach Folgendes aus:

getActionBar()/* or getSupportActionBar() */.setTitle(Html.fromHtml("<font color=\"red\">" + getString(R.string.app_name) + "</font>"));

Sie können auch den roten Hex-Code #FF0000 anstelle von Word red verwenden. Wenn Sie Probleme damit haben, lesen Sie Android Html.fromHtml (String) funktioniert nicht für <font color = '#'> Text </ font> .


Wenn Sie eine Farbressource verwenden möchten, kann dieser Code außerdem verwendet werden, um den korrekten HEX-String abzurufen und ggf. das Alpha zu entfernen (das font -Tag unterstützt kein Alpha):

int orange = getResources().getColor(R.color.orange);
String htmlColor = String.format(Locale.US, "#%06X", (0xFFFFFF & Color.argb(0, Color.red(orange), Color.green(orange), Color.blue(orange))));
93
Phil

Ich hatte das gleiche Problem wie Sie, es handelt sich um ein Holo.Light-Thema, aber ich wollte die ActionBar-Farbe gestalten, also musste ich auch die Textfarbe sowie Titel und Menüs ändern. Am Ende ging ich zu git hub und schaute in den Quellcode, bis ich den verdammt richtigen Stil gefunden habe:

<?xml version="1.0" encoding="utf-8"?>
<!-- For honeycomb and up -->
<resources>

    <style name="myTheme" parent="@Android:style/Theme.Holo.Light">
        <item name="Android:actionBarStyle">@style/myTheme.ActionBar</item>
        <item name="Android:actionMenuTextColor">@color/actionBarText</item>
    </style>

    <style name="myTheme.ActionBar" parent="@Android:style/Widget.Holo.Light.ActionBar">
        <item name="Android:background">@drawable/actionbarbground</item>
        <item name="Android:titleTextStyle">@style/myTheme.ActionBar.Text</item>
    </style>

    <style name="myTheme.ActionBar.Text" parent="@Android:style/TextAppearance">
        <item name="Android:textColor">@color/actionBarText</item>
    </style>

</resources>

alles was Sie jetzt tun müssen, ist, den gewünschten @color/actionBarText- und @drawable/actionbarbground-Code einzustellen

92
Budius

Die ActionBar-ID ist nicht direkt verfügbar, daher müssen Sie hier etwas hacken.

int actionBarTitleId = Resources.getSystem().getIdentifier("action_bar_title", "id", "Android");
if (actionBarTitleId > 0) {
    TextView title = (TextView) findViewById(actionBarTitleId);
    if (title != null) {
        title.setTextColor(Color.RED);
    }
}
66

Fügen Sie es dem Stammverzeichnis der Aktionsleiste hinzu. Ich hatte dieses Problem. 

<style name="ActionBar" parent="@style/Theme.AppCompat.Light">
    <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
    <item name="actionMenuTextColor">@color/stdDarkBlueText</item>
</style>

<style name="Widget.Styled.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
    <item name="titleTextStyle">@style/ActionBarTitleText</item>
    <item name="subtitleTextStyle">@style/ActionBarSubTitleText</item>
</style>

<style name="ActionBarTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="Android:textColor">@color/stdDarkBlueText</item>
    <item name="Android:textSize">12sp</item>
</style>

<style name="ActionBarSubTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Subtitle">
    <item name="Android:textColor">@color/stdDarkBlueText</item>
    <item name="Android:textSize">12sp</item>
</style>

actionMenuTextColor - ändert die Textfarbe für den Text der Aktionsleiste. Es hat nie funktioniert, wenn es Teil des Widget.Styled.ActionBar war, also musste ich ihn der Wurzel hinzufügen. Andere 2 Attribute ändern den Titel und den Untertitel einer Aktionsleiste.

26
Nabdreas

ich habe mit einfachem einzeiligen Code fertig 

actionBar.setTitle(Html.fromHtml("<font color='#ff0000'>ActionBartitle </font>"));
26
MilapTank

Es ist ein altes Thema, aber für zukünftige Leser macht die Verwendung von ToolBar alles sehr einfach:

Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar);
toolbar.setTitle(R.string.app_name);
toolbar.setTitleTextColor(getResources().getColor(R.color.someColor));
setSupportActionBar(toolbar);
23
Masoud Dadashi

Das Festlegen einer HTML-Zeichenfolge in der Aktionsleiste funktioniert im Materialdesign in SDK v21 + nicht

Wenn Sie es ändern möchten, sollten Sie die primäre Textfarbe in Ihrer style.xml festlegen

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Android:Theme.Material.Light">
        <!-- Customize your theme here. -->
        <item name="Android:textColorPrimary">@color/actionbar-text-color</item>
    </style>
</resources>    
16
Koen Hendriks

Wenn Sie den Untertitel auch formatieren möchten, fügen Sie diesen einfach in Ihrem benutzerdefinierten Stil hinzu.

<item name="Android:subtitleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>

Die Leute, die das gleiche Ergebnis für die AppCompat-Bibliothek erhalten möchten, haben Folgendes verwendet:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomActivityTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
        <item name="Android:actionBarStyle">@style/MyActionBar</item>
        <item name="actionBarStyle">@style/MyActionBar</item>
        <!-- other activity and action bar styles here -->
    </style>

    <!-- style for the action bar backgrounds -->
    <style name="MyActionBar" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="Android:background">@drawable/actionbar_background</item>
        <item name="background">@drawable/actionbar_background</item>
        <item name="Android:titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
        <item name="Android:subtitleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
        <item name="titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
        <item name="subtitleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
     </style>
    <style name="MyTheme.ActionBar.TitleTextStyle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
        <item name="Android:textColor">@color/color_title</item>
      </style>
</resources>
12
Tarun

Der einfachste Weg ist, dies in der styles.xml zu tun.

Die Vorlage styles.xml von Google generiert derzeit Folgendes:

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

Wenn Sie vor dem abschließenden Tag eine weitere Zeile hinzufügen, ändert sich die Textfarbe in die dunkle Aktionsleiste:

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="actionBarTheme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
</style>

Wenn Sie die Farbe an etwas anderes anpassen möchten, können Sie entweder Ihre eigene Farbe in colors.xml angeben oder sogar eine integrierte Farbe von Android mit dem Attribut Android: textColorPrimary verwenden:

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="actionBarTheme">@style/AppTheme.AppBarOverlay</item>
</style>


<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="Android:textColorPrimary">@Android:color/darker_gray</item>
</style>

Hinweis: Dadurch werden die Farbe des Titels und auch die Titel aller in der Aktionsleiste angezeigten Menüelemente geändert.

8
Sam

Dies ist die Lösung, die ich verwendet habe, nachdem ich alle Antworten geprüft hatte

<!-- Base application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorAccent">@color/Button_color</item>
    <item name="Android:editTextStyle">@style/EditTextStyle</item>
    <item name="Android:typeface">monospace</item>
    <item name="Android:windowActionBar">true</item>
    <item name="colorPrimary">@color/Title_Bar_Color</item>
    <item name="Android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
    <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>

</style>

<style name="EditTextStyle" parent="Widget.AppCompat.EditText"/>

<style name="Widget.Styled.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
    <item name="titleTextStyle">@style/ActionBarTitleText</item>
    <item name="Android:background">@color/Title_Bar_Color</item>
    <item name="background">@color/Title_Bar_Color</item>
    <item name="subtitleTextStyle">@style/ActionBarSubTitleText</item>
</style>

<style name="ActionBarTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="Android:textColor">@color/solid_white</item>
    <item name="Android:textSize">12sp</item>
</style>

<style name="ActionBarSubTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Subtitle">
    <item name="Android:textColor">@color/solid_white</item>
    <item name="Android:textSize">12sp</item>
</style>

Ändern Sie die erforderlichen Farben, damit es funktioniert

4
Smaran

Sie haben den Weg gefunden, es gut zu machen, ohne ein eigenes Layout für API> = 21 zu erstellen.

Es färbt nur Texte ein und steuert Drawables innerhalb der Aktionsleiste.

Ich hoffe es wird für jemanden nützlich sein.

<!--Material design primary colors-->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/accent</item>
    <item name="Android:navigationBarColor">@color/primary_dark</item>
    <item name="actionBarTheme">@style/AppBaseTheme.Toolbar</item>
</style>

<!--Action bar-->
<style name="AppBaseTheme.Toolbar" parent="Widget.AppCompat.ActionBar.Solid">
    <item name="Android:textColorPrimary">@color/action_bar_text</item>
    <item name="colorControlNormal">@color/action_bar_text</item>
</style>
4
reaper

Versuchen Sie, dies in onCreate Ihrer Aktivitäten hinzuzufügen. Funktioniert auf fast jeder Android-Version.

 actionBar.setTitle(Html.fromHtml("<font color='#ffff00'>Your Title</font>"));  

oder

getSupportActionBar().setTitle(Html.fromHtml("<font color='#ffff00'>Your Title</font>"));
3
onexf

Viele Antworten sind veraltet, daher werde ich den Thread aktualisieren und zeigen, wie Textfarbe und Hintergrundfarbe in ActionBar (Toolbar) und im ActionBar-Popupmenü geändert werden.

Der neueste Ansatz in Android (Stand Mai 2018) bei der Arbeit mit der Aktionsleiste (Toolbar) ist die Verwendung von Theme mit NoActionBar und die Verwendung von Toolbar.

also hier ist was du brauchst:

  1. Deklarieren Sie die Symbolleiste in Activity (wodurch AppCompatActivity erweitert wird):

    Toolbar myToolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(myToolbar);
    
  2. Symbolleiste in der Layout-XML der Aktivität hinzufügen. Hier legen wir unsere benutzerdefinierten (überschriebenen Designs) fest, beachten Sie Android:theme="@style/ThemeOverlay.AppTheme.ActionBar" und app:popupTheme="@style/ThemeOverlay.AppTheme.PopupMenu", sie werden den Trick ausführen.

    <Android.support.v7.widget.Toolbar
    Android:id="@+id/toolbar"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:minHeight="?attr/actionBarSize"
    Android:theme="@style/ThemeOverlay.AppTheme.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppTheme.PopupMenu"
    app:layout_constraintTop_toTopOf="parent" />
    
  3. In Ihrer styles.xml müssen Sie diese beiden Stile überschreiben, um benutzerdefinierte Farben festzulegen:

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="actionBarTheme">@style/ThemeOverlay.AppTheme.ActionBar</item>
    <item name="actionBarPopupTheme">@style/ThemeOverlay.AppTheme.PopupMenu</item>
    </style>
    
    <style name="ThemeOverlay.AppTheme.ActionBar" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="Android:textColorPrimary">@color/action_bar_text_color</item>
    <item name="Android:background">@color/action_bar_bg_color</item>
    </style>
    
    <style name="ThemeOverlay.AppTheme.PopupMenu" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="Android:background">@color/popup_bg_color</item>
    <item name="Android:textColorPrimary">@color/popup_text_color</item>
    </style>
    

Das ist es Leute

p.s. Wenn Sie mich fragen, würde ich sagen: JA, das ganze Thema ist eine Hölle.

3
Kirill Karmazin

Diese Funktion funktioniert gut

private void setActionbarTextColor(ActionBar actBar, int color) {

    String title = actBar.getTitle().toString();
    Spannable spannablerTitle = new SpannableString(title);
    spannablerTitle.setSpan(new ForegroundColorSpan(color), 0, spannablerTitle.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    actBar.setTitle(spannablerTitle);

}

dann füttere es einfach mit deiner Aktionsleiste und der neuen Farbe dh

ActionBar actionBar = getActionBar();    // Or getSupportActionBar() if using appCompat
int red = Color.RED
setActionbarTextColor(actionBar, red);
3
365SplendidSuns

Probieren Sie viele Methoden aus. In der niedrigen Version der API ist <item name="actionMenuTextColor">@color/your_color</item> eine praktikable Methode. Verwenden Sie nicht den Android-Namespace. Hoffnung kann Ihnen dabei helfen

ps:

  <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="actionMenuTextColor">@color/actionMenuTextColor</item>
</style>
2
BoBoMEe

Eine schöne Lösung ist, einen SpannableStringBuilder zu verwenden und die Farbe so einzustellen. Sie können sogar verschiedene Farben an verschiedenen Stellen der Saite verwenden, Bilder hinzufügen usw.

Getestet mit der neuen Support-Bibliothek.

Siehe Android: Teil eines Strings mit TextView.setText () einfärben?

0
Maciej Swic

sie können die Farbe eines beliebigen Textes ändern, indem Sie das html <font>-Attribut direkt in xml -Dateien . verwenden, zum Beispiel in strings.xml:

<resources>
    <string name = "app_name">
        <html><font color="#001aff">Multi</font></html>
        <html><font color="#ff0044">color</font></html>
        <html><font color="#e9c309">Text </font></html>
    </string>
</resources>

 enter image description here

0
hofs

Dies ist nicht die empfohlene Lösung, da ich hier in Android apis gehe, aber da meine Anwendung das Thema dynamisch ändern muss, wenn die XML-Bedingungen hier nicht möglich sind. Aber diese Lösung funktioniert sehr gut.

Lösung:--

 /**
 * 
 * @author Kailash Dabhi
 * @email [email protected]
 *
 */ 
 public static void setActionbarTextColor(Activity activity, int color) {
    Field mActionViewField;
    try {
        mActionViewField = activity.getActionBar().getClass()
                .getDeclaredField("mActionView");
        mActionViewField.setAccessible(true);
        Object mActionViewObj = mActionViewField.get(activity
                .getActionBar());

        Field mTitleViewField = mActionViewObj.getClass().getDeclaredField(
                "mTitleView");
        mTitleViewField.setAccessible(true);
        Object mTitleViewObj = mTitleViewField.get(mActionViewObj);

        TextView mActionBarTitle = (TextView) mTitleViewObj;
        mActionBarTitle.setTextColor(color);
        // Log.i("field", mActionViewObj.getClass().getName());
    } catch (NoSuchFieldException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    }

}
0
Kailash Dabhi

Für Android 5 (Lollipop) müssen Sie Android: actionBarPopupTheme verwenden, um textColor für das Überlaufmenü festzulegen.

0
m02ph3u5