ActionBar metin rengi


288

ActionBar'ın metin rengini nasıl değiştirebilirim? Holo Light Teması'nı miras aldım, ActionBar'ın arka planını değiştirebiliyorum ama metin rengini değiştirmek için ince ayarın niteliğinin ne olduğunu bulamıyorum.


Tamam, android: textColorPrimary niteliğiyle metin rengini değiştirebiliyorum, ancak aynı zamanda ActionBar düğmelerinde taşma olduğunda görüntülenen açılır menünün metin rengini de değiştiriyor. Bu açılır menünün / Liste'nin rengini nasıl değiştireceğiniz hakkında bir fikriniz var mı?


benim için işe yarayan bir çözüm yayınladı. buraya bakın stackoverflow.com/a/16175220/627827
spaceMonkey

Yanıtlar:


447

Tamam, daha iyi bir yol buldum. Artık yalnızca başlığın rengini değiştirebiliyorum. Altyazıyı da değiştirebilirsiniz.

İşte benim 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>

32
Doğru yol budur. Ancak, tutarlılık için, içinden Miras alan olmalıdır Widget.Holo.Light.ActionBariçin MyTheme.ActionBarStyle.
Jake Wharton

7
Oluşturmayacak - ADT, v13 veya daha üstünü gerektirdiğinden şikayet ediyor (bu yüzden ... çoğu Android el cihazında çalışmaz :()
Adam

8
@Adam Ben aynı sorunu vardı, ama sonraki cevap benim için çalışıyor - yerine ebeveyn = "@ android: style / TextAppearance.Holo.Widget.ActionBar.Title" use parent = "@ android: style / TextAppearance"
bkurzius

8
Appcompat kitaplığı kullanıyorsanız, Holo'yu AppCompat ile değiştirin. Çalışır
sha

3
@LOG_TAG Widget.AppCompat.Light.ActionBar kullanın
sha

97

Herhangi bir lezzeti ile iyi çalışan bir yol buldum ActionBar( Sherlock , Compat ve Native ) :

Sadece kullanmak html başlık ayarlayın ve metin rengini belirtmek için. Örneğin, ActionBar metin rengini kırmızı olarak ayarlamak için bunu yapmanız yeterlidir:

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

#FF0000Kelime yerine kırmızı onaltılı kodu da kullanabilirsiniz red. Bununla ilgili sorun yaşıyorsanız Android Html.fromHtml (String) <font color = '#'> text </font> için çalışmaz bölümüne bakın .


Ayrıca, bir renk kaynağı kullanmak istiyorsanız, bu kod doğru HEX Dizesini almak ve gerekirse alfa kaldırmak için kullanılabilir ( yazı tipi etiketi alfa'yı desteklemez):

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

Html.fromHtml () yöntemine bir dize koymanız gerektiğinden ve yönteme birden çok parametre yerleştirdiğiniz için bu bir hata verir. "," İle "+" değiştirirken bu mükemmel bir şekilde çalışır :-).
pinyin_samu

3
Onlarca yıl aradıktan sonra, bu en kolay çözüm! İyi iş!
bmkay

2
@MSI, sadece değiştirmek de altıgen değerleri kullanabilirsiniz redile " + color + ".
Phil

1
@MSI, ne deneyebilir bu yayını (aynı zamanda sorumu güncellenir) önerir? Sadece yerini #FF0000ile "+color+".
Phil

1
Teşekkürler Phil. Mükemmel çalışıyor! Bu şekilde denedim: getSupportActionBar (). SetTitle (Html.fromHtml ("<font color = '" + color + "'>" + "Home" + "</font>")); Sadece 'yerine' kullanmak zorundadır.
Ocak'ta MSIslam

93

Seninle aynı problemi yaşıyordum, bu bir Holo.Light teması ama ActionBar rengini şekillendirmek istedim, bu yüzden metin rengini ve hem Başlık hem de Menüler'i değiştirmem gerekiyordu. Sonunda git hub'a gittim ve doğru stili bulana kadar kaynak koduna baktım:

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

şimdi tek yapmanız gereken @color/actionBarTextve @drawable/actionbarbgroundistediğinizi ayarlamak !


Nerede bu xml kullanmak zorunda? değerler veya değerler-v11 veya değerler v-14 ??
DroidLearner

cevap Şubat / 2012'den, zamanında V14 yoktu. Kesinlikle V11.
Budius

3.0'ın altında sistemde bir actionBar yoktur.
Budius

Action Bar Sherlock kullanıyorum ve çözümü buldum. Teşekkürler :)
DroidLearner

3
actionbar sherlock için actionbar'a özgü isimler kullanmanız gerekir ve bu jeneratörü kullanabilirsiniz: jgilfelt.github.com/android-actionbarstylegenerator Biz her zaman çalıştığım yerde kullanıyoruz. Çok iyi
Budius

67

ActionBar Kimliği doğrudan kullanılamıyor, bu nedenle burada biraz saldırı yapmak zorundasınız.

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

1
NullPointerExceptionbu çizgideactionBarTextView.setTextColor(Color.RED);
DroidLearner

3
API düzeyi <11, ActionBarSherlock çalıştırıyorsanız ve kendinize pahalı bir çağrı kaydetmek getIndentifier()istiyorsanız, (TextView) findViewById(com.actionbarsherlock.R.id.abs__action_bar_title);önce bakabilirsiniz (boş olup olmadığını kontrol ettiğinizden emin olun).
Andre

"ActionBar Kimliği doğrudan kullanılamıyor" aslında benim durumumda araç çubuğuna Toolbar toolbar = findViewById(R.id.toolbar);xml mizanpajında com.google.android.material.appbar.AppBarLayoutöğeyle çevrili gibi kolayca erişilebilir , o zamantoolbar.setTitleTextColor( getResources().getColor( R.color.colorViolet ) );
YoussefDir

32

Bu eski bir konu ama gelecekteki okuyucular için Araç Çubuğu'nu kullanmak her şeyi çok kolaylaştırıyor:

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


28

Eylem çubuğunun kök dizinine ekleyin. Bu sorunu yaşadım.

<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 - eylem çubuğu metni için metin rengini değiştirir, bir parçası olduğunda asla işe yaramazWidget.Styled.ActionBar , bu yüzden köke eklemek zorunda kaldım. Diğer 2 özellik, bir işlem çubuğunun başlığını ve alt başlığını değiştirir.


"ActionMenuTextColor" yerine "android: actionMenuTextColor" kullanın. :)
AnkitRox

20

Eylem çubuğunda bir HTML dizesi ayarlamak SDK v21 + 'daki Malzeme temasında çalışmaz

Değiştirmek isterseniz, style.xml dosyasındaki birincil metin rengini ayarlamanız gerekir

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

1
Bu, uygulamanın her yerinde birincil metin rengini değiştirir!
Muhammed

16

En basit yol bunu styles.xml dosyasında yapmaktır.

Google'ın şablon styles.xml şu anda aşağıdakileri oluşturur:

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

Gösterildiği gibi, kapanış etiketinin önüne bir satır daha eklerseniz, bu metin rengini Koyu Eylem Çubuğu ile olması gerektiği şekilde değiştirir:

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

Rengi başka bir şeye göre özelleştirmek istiyorsanız, renklerdeki kendi renginizi belirtebilirsiniz. Xml veya android: textColorPrimary özelliğini kullanarak Android'den yerleşik bir renk kullanabilirsiniz:

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

Not: Bu, ActionBar'da görüntülenen tüm MenuItems öğelerinin başlığını ve başlıklarını değiştirir.


12

Altyazıyı da biçimlendirmek istiyorsanız, bunu özel stilinize ekleyin.

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

AppCompatKütüphane için aynı sonucu almak isteyen insanlar o zaman kullandım:

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

Hafif bir tema, karanlık eylem çubuğu ve beyaz metin arıyorum. Kodunuz, şimdiye kadar bulduğum, herhangi bir etkisi olan tek şey, ancak tüm eylem çubuğunu beyaza çeviriyor. Neler olabileceğine dair bir fikrin var mı? Evet, bunun bir buçuk yaşında olduğunu biliyorum. :-)
nasch

Bu, sorunumu çözmeme yardımcı oldu. Her ikisini de eklemem gerekiyordu <item name="android:titleTextStyle"> ve <item name="titleTextStyle"> çünkü appcompat destek kütüphanesini kullanıyordum.
Rock Lee

başlık
düşüyor

9

API> = 21 üzerinde kendi düzeninizi oluşturmadan güzel bir şekilde yapmanın yolunu buldum.

Yalnızca eylem çubuğundaki metinleri renklendirir ve çekilebilirleri kontrol eder.

Umarım birisi için yararlı olur.

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

7

Bir sürü cevap kaldırıldı, bu yüzden iş parçacığını güncelleyeceğim ve ActionBar (Araç Çubuğu) ve ActionBar açılır menüsünde metin rengini ve arka plan rengini nasıl değiştireceğimizi göstereceğim.

Android'de (Mayıs 2018 itibariyle) Eylem çubuğu (Araç Çubuğu) ile çalışmadaki en son yaklaşım, NoActionBar ile Tema kullanmak ve bunun yerine Araç Çubuğu kullanmaktır.

işte ihtiyacınız olan şey:

  1. Etkinlikte (AppCompatActivity'yi genişleten) Araç Çubuğunu bildirin:

    Toolbar myToolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(myToolbar);
  2. Etkinliğin düzen xml'sine Araç Çubuğu ekleyin. Burada bizim özel (üzerine yazılır temalar), notu ayarlayacaktır android:theme="@style/ThemeOverlay.AppTheme.ActionBar"ve app:popupTheme="@style/ThemeOverlay.AppTheme.PopupMenu"onlar hile yapacak.

    <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. Styles.xml dosyasında, özel renkler ayarlamak için bu iki stilin üzerine yazmanız gerekir:

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

Bu kadar millet

ps bana sorarsanız söyleyebilirim: EVET, tüm bu Tema şey bir karmaşa cehennemdir.


5

Tüm cevapları kontrol ettikten sonra kullandığım çözüm bu

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

Çalışacağı gerekli renkleri değiştirin


4

Bu işlev iyi çalışıyor

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

}

kullanmak için sadece eylem çubuğunuzu ve yeni renginizi besleyin yani

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

4

Bunu Faaliyetinizin onCreate'ına eklemeyi deneyin. Hemen hemen her Android sürümünde çalışır.

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

veya

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

Bunun gibi bir dize koymalısınız: String colouredTitle = "<font color = '# FFFFFF'>" + Your_Title + "</font>"; Html.fromHtml (coloredTitle);
Tincho825

2

Çok sayıda yöntem deneyin, API'nın düşük sürümünde, uygulanabilir bir yöntemdir <item name="actionMenuTextColor">@color/your_color</item>ve Android ad alanını kullanmayın, umut size yardımcı olabilir

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>

1

sadece bunu kendi tarzınıza koyun.

<item name="android:textColorPrimary">@color/yourcolor</item>



0

Ben burada android apis gidiyorum ama bu benim uygulama şartlar xml burada mümkün değil koşullarında dinamik olarak değiştirmek gerektirir gibi bu önerilen bir çözüm değildir, bu yüzden bunu yapmak gerekiyor. Ancak bu çözüm çok iyi çalışıyor.

Çözüm:--

 /**
 * 
 * @author Kailash Dabhi
 * @email kailash09dabhi@gmail.com
 *
 */ 
 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

Android 5 (lolipop) için, taşma menüsü için textColor'u ayarlamak için android: actionBarPopupTheme kullanmanız gerekir .


0

En basit yol:
Bu iki satırı styles.xml dosyanıza ekleyin

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
<item name="android:textColorSecondary">@color/white</item>
<item name="android:textColor">@color/white</item>
</style>

Rengi renginizle değiştirin.


-1

html <font>özniteliğini doğrudan xmldosyalarda kullanarak herhangi bir metnin rengini değiştirebilirsiniz . örneğ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>

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.