web-dev-qa-db-ja.com

アクションバーのテキストの色

actionBarのテキストの色を変更する方法私はHolo Lightテーマを継承しています。ActionBarの背景を変更することはできますが、Tweakのテキストの色を変更するための属性が何であるかわかりません。


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

267
rnoway

わかりました、私はもっと良い方法を見つけました。私は今タイトルの色だけを変えることができます。字幕を微調整することもできます。

これが私の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>
439
rnoway

私はあなたと同じ問題を抱えていました、それは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に設定することです!

93
Budius

私はどんな種類のActionBarSherlockCompat、およびNativeでうまく動作する方法を見つけました。 :

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

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

Wordのredの代わりに赤い16進コード#FF0000を使用することもできます。これに問題がある場合は、 を参照してください。Android Html.fromHtml(String)は<font color = '#'>テキスト</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))));
93
Phil

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

これは古い話題ですが、将来の読者のために、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
Masoud Dadashi

私は簡単な一行コードでやった

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

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

<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つの属性は、アクションバーのタイトルと字幕を変更します。

26
Nabdreas

アクションバーにHTML文字列を設定しても、SDK v21以降のMaterialテーマでは機能しません

変更したい場合は、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>    
17
Koen Hendriks

字幕をスタイルしたい場合は、これをカスタムスタイルに追加するだけです。

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

最も簡単な方法は、これを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>

注:これにより、タイトルの色と、アクションバーに表示されているすべてのMenuItemのタイトルも変わります。

11
Sam

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

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

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

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

  1. In Activity(AppCompatActivityを拡張する)でToolbarを宣言します。

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

これは私がすべての答えをチェックした後に使った解決策です

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

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

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

または

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

この機能はうまくいきます

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);
3
365SplendidSuns

多くのメソッドを試してみてください。低バージョンの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>
2
BoBoMEe

良い解決策はSpannableStringBuilderを使用してそのように色を設定することです。文字列のさまざまな部分にさまざまな色を使用したり、画像を追加したりすることもできます。

新しいサポートライブラリでテスト済み。

Android:TextView.setText()を使って文字列の一部を着色する?

0
Maciej Swic

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

私はここでAndroid APIを使用していますが、ここでは不可能な条件xmlでテーマを動的に変更する必要があるため、これは推奨される解決策ではありません。しかし、この解決策はとてもうまくいっています。

溶液: -

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

Android 5(Lollipop)の場合、オーバーフローメニューにtextColorを設定するには、Android:actionBarPopupThemeを使用する必要があります。

0
m02ph3u5