ActionBarテキストの色


288

ActionBarのテキストの色を変更するにはどうすればよいですか?Holo Lightテーマを継承しました。ActionBarの背景を変更することはできますが、テキストの色を変更するために微調整する属性がわかりません。


わかりました。属性android:textColorPrimaryでテキストの色を変更できますが、ActionBarボタンでオーバーフローが発生したときに表示されるドロップダウンメニューのテキストの色も変更します。これらのドロップダウンメニュー/リストの色を変更する方法はありますか?


ちょうど私のために働いた解決策を投稿しました。こちらをご覧くださいstackoverflow.com/a/16175220/627827
spaceMonkey

回答:


447

わかりました、もっと良い方法を見つけました。タイトルの色のみ変更できるようになりました。字幕を微調整することもできます。

これが私の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
これが正しい方法です。しかし、一貫性のために、あなたが継承する必要があるWidget.Holo.Light.ActionBarためMyTheme.ActionBarStyle
Jake Wharton

7
ビルドしない-ADTはv13以降が必要であると不平を言います(したがって、ほとんどのAndroidハンドセットでは機能しません:()
Adam

8
@Adam同じ問題がありましたが、次の答えは私にとってはうまくいきます。parent= "@ android:style / TextAppearance.Holo.Widget.ActionBar.Title"の代わりに、parent = "@ android:style / TextAppearance"を使用してください
bkurzius

8
Appcompatライブラリを使用している場合は、HoloをAppCompatに置き換えます。機能する
sha

3
@LOG_TAG使用Widget.AppCompat.Light.ActionBar
SHA

97

ActionBarSherlockCompat、およびNative)のどのフレーバーでもうまく機能する方法を見つけました。

htmlを使用してタイトルを設定し、テキストの色を指定するだけです。たとえば、ActionBarテキストの色を赤に設定するには、次のようにします。

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

#FF0000単語の代わりに赤い16進コードを使用することもできredます。これに問題がある場合は、AndroidのHtml.fromHtml(String)が<font color = '#'> text </ font>に対して機能しないことをご覧ください。


さらに、カラーリソースを使用する場合、このコードを使用して正しいHEX文字列を取得し、必要に応じてアルファを削除できます(フォントタグはアルファをサポートしていません)。

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()に文字列を配置する必要があり、メソッドに複数のパラメーターを配置しているため、これはエラーになります。「、」を「+」に置き換えると、これは完全に機能します:-)。
pinyin_samu 2013年

3
何十年もの検索の後、これが最も簡単な解決策です。よくやった!
bmkay 2013

2
@ MSI、16進数値も使用できます。単にに置き換えredてください" + color + "
Phil

1
@MSI、この投稿が示唆することを試すことができますか(私の質問も更新されました)?で置き換え#FF0000てください"+color+"
Phil

1
フィルありがとう それは完璧に働いています!私はこの方法で試しました:getSupportActionBar()。setTitle(Html.fromHtml( "<font color = '" + color + "'>" + "Home" + "</ font>")); \の代わりに 'を使用する必要があります。
MSIslam 2014年

93

私はあなたと同じ問題を抱えていました。それはHolo.Lightテーマですが、ActionBarの色をスタイルしたかったので、テキストの色と、タイトルとメニューの両方を変更する必要がありました。だから最後に私はgit hubに行き、正しいコードが見つかるまでソースコードを調べました:

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

だから今あなたがしなければならないすべては何でも設定し@color/actionBarText@drawable/actionbarbgroundあなたが欲しいです!


このxmlを使用する必要がある場所は?値または値-v11または値v-14 ??
DroidLearner 2013年

答えは2012年2月のことです。当時はV14がありませんでした。確かにV11です。
Budius 2013年

3.0未満では、システムにactionBarがありません。
Budius 2013年

私はAction Bar Sherlockを使用していますが、解決策を見つけました。ありがとう:)
DroidLearner

3
アクションバーシャーロックのためにあなたは、アクションバーの特定の名前を使用する必要があり、あなたは、この発電機を使用することができます。jgilfelt.github.com/android-actionbarstylegenerator私は仕事どこ我々は常にそれを使用します。それは非常に良いです
ブディウス

67

ActionBar IDは直接利用できないため、ここで少しハッキングする必要があります。

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
NullPointerExceptionこの行のactionBarTextView.setTextColor(Color.RED);
DroidLearner 2013年

3
APIレベル<11、ActionBarSherlockを実行していて、高額なへの呼び出しを節約したいgetIndentifier()場合は、(TextView) findViewById(com.actionbarsherlock.R.id.abs__action_bar_title);最初に調べることができます(nullでないことを確認してください)。
アンドレ

実際に私の場合には、ツールバーのような簡単にアクセスでき、「アクションバーIDは直接使用できません」Toolbar toolbar = findViewById(R.id.toolbar);のXMLレイアウトファイルで、それが囲まれる場合com.google.android.material.appbar.AppBarLayout、その要素toolbar.setTitleTextColor( getResources().getColor( R.color.colorViolet ) );
YoussefDir

32

これは古いトピックですが、将来の読者のために、ToolBarを使用するとすべてが非常に簡単になります。

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


28

アクションバーのルートに追加します。私はこの問題を抱えていました。

<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-アクションバーのテキストの色を変更します。それがの一部である場合は機能しなかっWidget.Styled.ActionBarたため、ルートに追加する必要がありました。その他の2つの属性は、アクションバーのタイトルとサブタイトルを変更します。


「actionMenuTextColor」の代わりに「android:actionMenuTextColor」を使用してください。:)
AnkitRox 2015

20

アクションバーでHTML文字列を設定すると、SDK v21以降のマテリアルテーマで機能しません

変更したい場合は、style.xmlでプライマリテキストの色を設定する必要があります

<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
これにより、アプリケーションのあらゆる場所で主要なテキストの色が変更されます!
Mohammed

16

最も簡単な方法は、styles.xmlでこれを行うことです。

Googleのテンプレートstyles.xmlは現在次のものを生成します。

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

図のように、終了タグの前にもう1行追加すると、テキストの色が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>

別の色にカスタマイズしたい場合は、colors.xmlで独自の色を指定するか、android:textColorPrimary属性を使用してAndroidの組み込み色を使用することもできます。

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

注:これにより、タイトルの色と、ActionBarに表示されるすべてのMenuItemのタイトルも変更されます。


12

字幕のスタイルを設定する場合も、カスタムスタイルに追加します。

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

AppCompatライブラリに対して同じ結果を得ようとしている人は、これが私が使用したものです:

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

私は明るいテーマ、暗いアクションバー、そして白いテキストを求めています。あなたのコードはこれまで私が見つけた唯一の効果があるものですが、それはアクションバー全体を白くします。何が起こっているのでしょうか?はい、私はこれが1年半前であることを知っています。:-)
nasch

これは私の問題の解決に役立ちました。私は両方を追加するために必要な<item name="android:titleTextStyle"> <item name="titleTextStyle">私はAPPCOMPATサポートライブラリを使用していたので。
Rock Lee

タイトルが消える
jairhumberto

8

API> = 21で独自のレイアウトを作成せずにそれをうまく行う方法を見つけました。

テキストの色付けとアクションバー内のドローアブルの制御のみを行います。

それが誰かのために役立つことを願っています。

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

多くの回答が非推奨になったので、スレッドを更新して、ActionBar(ツールバー)とActionBarポップアップメニューでテキストの色と背景色を変更する方法を示します。

Androidの最新のアプローチ(2018年5月現在)でアクションバー(ツールバー)を操作するには、テーマをNoActionBarで使用し、代わりにツールバーを使用します。

だからここにあなたが必要なものがあります:

  1. アクティビティ(AppCompatActivityを拡張)でツールバーを宣言します。

    Toolbar myToolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(myToolbar);
  2. ツールバーをアクティビティのレイアウトxmlに追加します。ここで、カスタム(上書きされたテーマ)を設定し、メモandroid:theme="@style/ThemeOverlay.AppTheme.ActionBar"app:popupTheme="@style/ThemeOverlay.AppTheme.PopupMenu"追加します。

    <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で、これら2つのスタイルを上書きしてカスタム色を設定する必要があります。

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

それだけです

PSあなたが私に尋ねれば私は言うでしょう:はい、この全体のテーマの事は混乱の地獄です。


5

これは私がすべての答えを確認した後に使用した解決策です

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

必要な色を変更します


4

この機能はうまく機能します

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

}

それを使用するには、アクションバーと新しい色をフィードするだけです。

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

4

これをアクティビティのonCreateに追加してみてください。ほとんどすべてのAndroidバージョンで動作します。

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

または

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

次のような文字列を配置する必要があります。String ColoredTitle = "<font color = '#FFFFFF'>" + Your_Title + "</ font>"; Html.fromHtml(coloredTitle);
Tincho825

2

APIの低バージョンで多くのメソッドを試してください。実行可能なメソッドは<item name="actionMenuTextColor">@color/your_color</item>、Android名前空間を使用せず、使用しないでください。

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

これをあなたのタイムスタイルに入れてください。

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



0

ここではアンドロイドAPIを使用するため、これは推奨されるソリューションではありませんが、アプリケーションではここでは不可能である条件xmlで動的にテーマを変更する必要があるため、これを行う必要があります。しかし、このソリューションは非常にうまく機能しています。

解決: -

 /**
 * 
 * @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(lollipop)の場合、android:actionBarPopupThemeを使用してオーバーフローメニューのtextColorを設定する必要があります。


0

最も簡単な方法は次のとおりです。
これらの2行をstyles.xmlファイルに追加します

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

色をあなたの色に置き換えてください。


-1

ファイル内で直接html <font>属性を使用して、テキストの色を変更できxmlます。たとえば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>

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.