Warna teks ActionBar


288

bagaimana saya bisa mengubah warna teks dari ActionBar? Saya telah mewarisi Tema Cahaya Holo, saya dapat mengubah latar belakang ActionBar tapi saya tidak tahu apa atribut untuk mengubah untuk mengubah warna teks.


Ok, saya bisa mengubah warna teks dengan atribut android: textColorPrimary tetapi juga mengubah warna teks dari menu dropdown yang ditampilkan ketika terjadi overflow pada tombol ActionBar. Adakah yang tahu bagaimana cara mengubah warna menu / Daftar dropdown itu?


baru saja memposting solusi yang bekerja untuk saya. lihat di sini stackoverflow.com/a/16175220/627827
spaceMonkey

Jawaban:


447

Ok, saya sudah menemukan cara yang lebih baik. Saya sekarang hanya dapat mengubah warna judul. Anda juga dapat mengubah subtitle.

Inilah styles.xml saya:

<?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
Ini cara yang benar. Namun, untuk konsistensi, Anda harus mewarisi dari Widget.Holo.Light.ActionBaruntuk MyTheme.ActionBarStyle.
Jake Wharton

7
Tidak mau membangun - ADT mengeluh bahwa ia membutuhkan v13 atau lebih tinggi (jadi ... tidak akan berfungsi di sebagian besar ponsel Android :()
Adam

8
@Adam Saya punya masalah yang sama, tetapi jawaban berikutnya bekerja untuk saya - alih-alih parent = "@ android: style / TextAppearance.Holo.Widget.ActionBar.Title" use parent = "@ android: style / TextAppearance"
bkurzius

8
Jika Anda menggunakan pustaka Appcompat, ganti Holo dengan AppCompat. Ini bekerja
sha

3
@LOG_TAG Gunakan Widget.AppCompat.Light.ActionBar
sha

97

Saya menemukan cara yang bekerja dengan baik dengan rasa ActionBar( Sherlock , Compat , dan Native ):

Cukup gunakan html untuk mengatur judul, dan tentukan warna teks. Misalnya, untuk mengatur warna teks ActionBar menjadi merah, cukup lakukan ini:

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

Anda juga dapat menggunakan kode heks merah #FF0000bukan kata red. Jika Anda mengalami masalah dengan ini, lihat Android Html.fromHtml (String) tidak bekerja untuk <font color = '#'> text </ font> .


Selain itu, jika Anda ingin menggunakan sumber daya warna, kode ini dapat digunakan untuk mendapatkan String HEX yang benar, dan menghapus alpha jika diperlukan ( tag font tidak mendukung 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))));

Ini memberikan kesalahan karena Anda harus meletakkan string dalam metode Html.fromHtml (), dan Anda menempatkan beberapa parameter dalam metode. Saat mengganti "," dengan "+" ini berfungsi dengan baik :-).
pinyin_samu

3
Setelah puluhan tahun mencari, ini adalah solusi termudah! Kerja bagus!
bmkay

2
@MSI, Anda dapat menggunakan nilai hex juga, cukup ganti reddengan " + color + ".
Phil

1
@MSI, dapatkah Anda mencoba apa yang disarankan oleh pos ini (juga memperbarui pertanyaan saya)? Ganti saja #FF0000dengan "+color+".
Phil

1
Phil terima kasih Ini bekerja dengan sempurna! Saya mencoba dengan cara ini: getSupportActionBar (). SetTitle (Html.fromHtml ("<font color = '" + color + "'>" + "Home" + "" ")); Hanya harus menggunakan 'sebagai pengganti \.
MSIslam

93

Saya memiliki masalah yang sama dengan Anda, ini adalah tema Holo.Light tapi saya ingin gaya warna ActionBar, jadi saya perlu mengubah warna teks juga dan juga Judul dan Menu. Jadi pada akhirnya saya pergi ke git hub dan melihat kode sumber sampai saya menemukan gaya yang benar:

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

jadi sekarang yang harus Anda lakukan adalah mengatur apa pun @color/actionBarTextdan yang @drawable/actionbarbgroundAnda inginkan!


Di mana saya harus menggunakan xml ini? nilai atau nilai-v11 atau nilai v-14 ??
DroidLearner

jawabannya dari Februari / 2012, tidak ada V14 saat itu. Jadi V11 pasti.
Budius

di bawah 3.0 sistem tidak memiliki actionBar.
Budius

Saya menggunakan Action Bar Sherlock dan saya menemukan solusinya. Terima kasih :)
DroidLearner

3
untuk actionbar sherlock Anda harus menggunakan nama spesifik actionbar dan Anda dapat menggunakan generator ini: jgilfelt.github.com/android-actionbarstylegenerator Kami selalu menggunakannya di tempat saya bekerja. Ini sangat bagus
Budius

67

ID ActionBar tidak tersedia secara langsung, jadi Anda harus melakukan sedikit peretasan di sini.

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
NullPointerExceptiondi baris iniactionBarTextView.setTextColor(Color.RED);
DroidLearner

3
Jika Anda menjalankan API level <11, ActionBarSherlock, dan Anda ingin menghemat panggilan yang mahal getIndentifier(), Anda bisa melihatnya (TextView) findViewById(com.actionbarsherlock.R.id.abs__action_bar_title);terlebih dahulu (pastikan untuk memeriksa apakah ini bukan nol).
Andre

"ID ActionBar tidak tersedia secara langsung" sebenarnya dalam kasus saya bilah alat mudah diakses seperti Toolbar toolbar = findViewById(R.id.toolbar);di mana dalam file tata letak xml dikelilingi oleh com.google.android.material.appbar.AppBarLayoutelemen, lalutoolbar.setTitleTextColor( getResources().getColor( R.color.colorViolet ) );
YoussefDir

32

Ini adalah topik lama tetapi bagi pembaca masa depan, menggunakan ToolBar membuat semuanya sangat mudah:

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


28

Tambahkan ke akar bilah tindakan. Saya punya masalah ini.

<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 - mengubah warna teks untuk teks bilah tindakan, itu tidak pernah berfungsi ketika itu adalah bagian dari Widget.Styled.ActionBar, jadi saya harus menambahkannya ke root. 2 atribut lainnya mengubah judul dan subtitle dari bilah tindakan.


Gunakan "android: actionMenuTextColor" alih-alih "actionMenuTextColor". :)
AnkitRox

20

Mengatur string HTML pada bilah tindakan tidak berfungsi pada tema Material di SDK v21 +

Jika Anda ingin mengubahnya, Anda harus mengatur warna teks utama di style.xml Anda

<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
Ini mengubah warna teks utama di mana saja dalam aplikasi!
Mohammed

16

Cara paling mudah adalah dengan melakukan ini di styles.xml.

Template styles.xml Google saat ini menghasilkan yang berikut:

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

Jika Anda menambahkan satu baris lagi sebelum tag penutup, seperti yang ditunjukkan, itu akan mengubah warna teks menjadi seperti apa seharusnya dengan Dark ActionBar:

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

Jika Anda ingin menyesuaikan warna dengan sesuatu yang lain, Anda dapat menentukan warna Anda sendiri dalam colors.xml atau bahkan menggunakan warna bawaan dari Android menggunakan atribut android: textColorPrimary:

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

Catatan: Ini mengubah warna judul dan juga judul dari setiap MenuItems yang ditampilkan di ActionBar.


12

Jika Anda ingin mendesain subtitle juga maka cukup tambahkan ini dalam gaya kustom Anda.

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

Orang-orang yang mencari untuk mendapatkan hasil yang sama untuk AppCompatperpustakaan maka inilah yang saya gunakan:

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

Saya mencoba tema yang terang, bilah tindakan yang gelap, dan teks putih. Kode Anda adalah satu-satunya hal yang saya temukan sejauh ini yang memiliki efek sama sekali, tetapi ternyata seluruh panel aksi menjadi putih. Adakah yang tahu apa yang sedang terjadi? Ya saya tahu ini berumur satu setengah tahun. :-)
nasch

Ini membantu saya memecahkan masalah saya. Saya hanya perlu menambahkan keduanya <item name="android:titleTextStyle"> dan <item name="titleTextStyle"> karena saya menggunakan pustaka dukungan appcompat.
Rock Lee

judulnya menghilang
jairhumberto

8

Menemukan cara untuk melakukannya dengan baik tanpa membuat tata letak Anda sendiri di API> = 21.

Ini hanya akan mewarnai teks dan mengontrol gambar di dalam bilah tindakan.

Semoga bermanfaat bagi seseorang.

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

Banyak jawaban sudah tidak digunakan lagi, jadi saya akan memperbarui utas dan menunjukkan cara mengubah warna teks dan warna latar belakang pada ActionBar (Toolbar) dan di menu pop up ActionBar.

Pendekatan terbaru di Android (per Mei 2018) dalam bekerja dengan Action bar (Toolbar) adalah dengan menggunakan Tema dengan NoActionBar dan menggunakan Toolbar sebagai gantinya.

jadi inilah yang Anda butuhkan:

  1. Dalam Activity (yang meluas AppCompatActivity), nyatakan Toolbar:

    Toolbar myToolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(myToolbar);
  2. Tambahkan Toolbar di tata letak xml Kegiatan. Di sini kita akan mengatur kebiasaan kita (tema yang ditimpa), perhatikan android:theme="@style/ThemeOverlay.AppTheme.ActionBar"dan app:popupTheme="@style/ThemeOverlay.AppTheme.PopupMenu", mereka akan melakukan trik.

    <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. Di styles.xml Anda, Anda harus menimpa kedua gaya tersebut untuk menetapkan warna khusus:

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

Itu orang-orang

ps jika Anda bertanya kepada saya, saya akan mengatakan: YA, seluruh Tema ini berantakan sekali.


5

Ini adalah solusi yang saya gunakan setelah memeriksa semua jawaban

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

Ubah warna yang dibutuhkan itu akan berfungsi


4

Fungsi ini berfungsi dengan baik

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

}

kemudian untuk menggunakannya cukup beri makan bilah tindakan dan warna baru yaitu

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

4

Coba tambahkan ini di onCreate Aktivitas Anda. Bekerja di hampir setiap versi Android.

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

atau

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

Anda harus meletakkan string seperti ini: String colourTitle = "<font color = '# FFFFFF'>" + Your_Title + "" "; Html.fromHtml (colourTitle);
Tincho825

2

Coba banyak metode, dalam versi API yang rendah, metode yang layak adalah <item name="actionMenuTextColor">@color/your_color</item>dan jangan gunakan namespace Android, semoga dapat membantu Anda

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

cukup letakkan ini dalam gaya thme Anda.

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



0

Ini bukan solusi yang disarankan karena saya akan menggunakan apis android di sini, tetapi karena aplikasi saya perlu mengubah tema secara dinamis pada kondisi xml tidak mungkin di sini, Jadi saya perlu melakukan ini. Tetapi solusi ini bekerja dengan sangat baik.

Larutan:--

 /**
 * 
 * @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

Untuk Android 5 (lollipop) Anda harus menggunakan android: actionBarPopupTheme untuk mengatur textColor untuk menu overflow.


0

Cara paling sederhana adalah:
Tambahkan dua baris ini ke file styles.xml Anda

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

Ganti warnanya dengan warna Anda.


-1

Anda dapat mengubah warna teks apa pun dengan menggunakan atribut html<font> langsung di xmlfile. misalnya di 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>

masukkan deskripsi gambar di sini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.