XMLを使用してActionBarActivityのActionBarの背景色を変更するにはどうすればよいですか?


277

詳細:

ActionBarActivityを拡張しています。
2011-11-06の時点で完全にパッチが適用されたEclipseおよびSDK。

<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="14" />  

Android 2.3.3を搭載したSamsungデバイスに導入すると、
アプリケーションはandroid:theme="@android:style/Theme.Light"

問題:アプリケーションは明るいですが、ActionBarは灰色でアイコンが青色で、青色の背景色ではほとんど見えません。また、ActionBarを明るくして、灰色のアイコンがより見やすくなるようにします。

スタイルを変更しようとしましたが、役に立ちませんでした。
些細なことを私はおそらく見逃している。

XMLを使用してActionBarActivityのActionBarの背景色を変更するにはどうすればよいですか?


2
この古い栗を閉じます。Sannidhiへのポイントは、人気のある要求ですが、この質問への回答はAndroidのかなりの数のバージョンに及び、私のコンテキストでは、SherlockActionBarを使用するというDavid Millersの提案が最も関連性がありました。
user77115 2013年

1
他の人のためのちょっとしたヒント:XMLビューの最初の要素をActionBar(この場合は白)と同じ背景にすると、ActionBarが灰色になります。
Joshua Pinter

考えてみると、TitleBarとActionBarは特別なものを提供しません。それらは、特にあなたがそれらを知らない場合、迷惑行為のようです。A.より良い代替策は、それらを非表示にし、独自のタイトルバーをデザインすることです。ビューとドローアブルを使用して独自のウィジェットを追加できます。タイトルバーにはウィジェットがありません。また、アクションバーには、すべてのmenuItemsについて、ドロップダウンリストを1つだけ含めることができます。多くのアプリでも、独自のアクションバーを優先しています。

回答:


523

ドキュメントに従って-「Android 3.0(APIレベル11)で追加されたActionBar APIを使用して、アクションバーの動作と表示を制御できます。」

そのため、ActionBarは、APIレベル10(Android 2.3.3)のターゲット環境では機能しません。

念のため、最低限のAPIレベル11をターゲットとする場合、次のようにカスタムスタイルを定義することで、ActionBarの背景色を変更できます。

<resources>
    <style name="MyTheme" parent="@android:style/Theme.Holo.Light">
        <item name="android:actionBarStyle">@style/MyActionBar</item>
    </style>

    <style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
        <item name="android:background">ANY_HEX_COLOR_CODE</item>
    </style>
</resources>

そして、アプリケーション/アクティビティのテーマとして「MyTheme」を設定します。


12
@AlexanderFragotsisを使用してください<item name="android:textColor">@color/my_color</item>
lethargicpanda 2013年

28
ActionBarCompatライブラリを使用している場合も、同じアプローチを使用する必要があります。唯一の違いは、actionBarStyleandroid:プレフィックスなし)アイテムを変更して、3.0より前のAndroidデバイスでのactionbarの外観を定義する必要があることです
Alex Semeniuk

3
色のHEXコードを置く代わりに、で@android:color定義されたa またはカスタム色を参照する可能性はありますcolors.xmlか?私はそれを試みましたが成功しませんでした。
jmrodrigg 14

1
「<item name = "android:textColor"> @ color / my_color </ item>」を使用してテキストアクションバーのテキストの色を変更できません
Shirish Herwade

2
これはandroid:backgroundタグでは機能しませんでしたが、androidタグを省略して<item name = "background">​​だけを配置すると、すべてのプラットフォームで色が変わりました。
stevyhacker 2016年

209

これを試して

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable("COLOR"));

1
11-06 10:53:16.985:E / AndroidRuntime(16956):java.lang.NoSuchMethodError:com.acme.myActivity.getActionBar
user77115

1
@ coder_For_Life22コンテキストアクションバーを取得する方法を知っていますか?
抱擁のオタク2012年

5
残念ながら、サポートライブラリ自体にはActionBarがありません。そのため、SherlockActionBarを含める必要があります。
David Miler

22
これは奇妙なことかもしれませんが、私の場合bar.setBackgroundDrawable(new ColorDrawable(Color.BLUE));、アクションバーの色を灰色に変更します。他の色に置く、などの場合、これらも起こりColor.REDColor.GREENそのために...ん、誰もが同じ問題を抱えている、またはこの問題の原因を知っていますか?Nexus Sデバイスを使用しています
AlexAndro

4
stackoverflow.com/a/17198657/1022454この投稿は、アクションバーの色が灰色になる問題を修正するようです。
Jonathon Fry

124

これを試して:

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0000ff")));

1
これは残りのコードにどのように適合しますか?これを実際に追加する場所に興味があります
JGallardo 2014年

7
@JGallardoとして正確な質問があります。これをどこに追加しますか?私はそれを試しましたonCreateが、それはNullPointerException 編集を与えました:これは私がrestoreActionBar ActionBar に追加したコードですactionBar = getSupportActionBar(); actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor( "#E5E4E2")));
rockydgeekgod 2015年

アクティビティのonCreateメソッドを追加します。
Ojonugwa Jude Ochalifu 2015

3
getActionBar()の代わりにgetSupportActionBar()を使用してください
Chanaka Fernando

69

これを使用してください-http://jgilfelt.github.io/android-actionbarstylegenerator/

ライブプレビューでアクションバーをカスタマイズできる素晴らしいツールです。

私は以前の答えを試しましたが、タブや文字などの他の色を変更するのに常に問題があり、時間をかけて調整を行っていました。このツールは、数分でデザインを完成させるのに役立ちました。

これはツールのスクリーンショットです

ではごきげんよう!:)


アプリに追加されたファイルを使用するようにアプリを設定するにはどうすればよいですか?
マイク

上記のスクリーンショット(名前付きの例)のコンテキストでは、生成されたresフォルダーを貼り付けた後、新しいスタイル@ style / Theme.Exampleが表示されます。AndroidManifest.xmlで、<application android:theme = "@ style / Theme.example">を設定します。動作するはずです:)
Mohammad Shabaz Moosa 2015

1
非推奨。残念ながら
Liangjun

55

同じ問題がありました。そのコードを入力すると、アクションバーが灰色になります。おそらく、元のスタイルシートは次のようになります。

<style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
    <!-- API 14 theme customizations can go here. -->
</style>

「DarkActionBar」は、アクションバーを灰色にしていたものです。私はこれをこれに変更しましたが、うまくいきました:

<style name="AppBaseTheme" parent="android:Theme.Holo.Light">
    <!-- API 14 theme customizations can go here. -->
    <item name="android:actionBarStyle">@style/MyActionBar</item>
</style>

<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
    <item name="android:background">#2aa4cd</item>
    <item name="android:titleTextStyle">@style/Theme.MyAppTheme.ActionBar.TitleTextStyle</item>
</style>        

<style name="Theme.MyAppTheme.ActionBar.TitleTextStyle" parent="android:style/TextAppearance.Holo.Widget.ActionBar.Title">
    <item name="android:textColor">#FFFFFF</item>
</style>    

テキストの色を編集する方法も紹介しました。また、リソースの周りを変更する必要もありません。

-ウォーレン


38

Actionbarの動作は、API <11でも変更できます

参考のためにAndroidの公式ドキュメントを参照してください

私が使用してアプリケーションを構築していますminSdkVersion = "9"し、targetSdkVersion = "21"私はアクションバーの色を変更し、それがAPIレベルで正常に動作します9

ここにXMLがあります

res/values/themes.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- the theme applied to the application or activity -->
    <style name="CustomActionBarTheme"
           parent="@style/Theme.AppCompat.Light.DarkActionBar">
        <item name="android:actionBarStyle">@style/MyActionBar</item>

        <!-- Support library compatibility -->
        <item name="actionBarStyle">@style/MyActionBar</item>
    </style>

    <!-- ActionBar styles -->
    <style name="MyActionBar"
           parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
        <item name="android:background">@color/actionbar_background</item>

        <!-- Support library compatibility -->
        <item name="background">@color/actionbar_background</item>
    </style>
</resources>

必要なアクションバーの色を設定します

res/values/colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="actionbar_background">#fff</color> //write the color you want here
</resources>

アクションバーの色も.classファイルで定義できます。スニペットは

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0000ff")));

しかし、これは動作しませんAPI <11は、そうでアクションバーをスタイリングすることはxmlAPI <11のための唯一の方法です



スニペットをフラグメントで使用すると、アプリで機能しません。ActionBar bar = getActivity()。getActionBar();に変更しました。。フラグメントが開かれるとすぐにクラッシュします。
ホセマヌエルアバルカロドリゲス2015

1
問題が見つかり、次のように動作します:ActionBar actionBar = getSupportActionBar();
ホセマヌエルアバルカロドリゲス2015

20

この行をカラーコードで直接追加します

getSupportActionBar().setBackgroundDrawable(
    new ColorDrawable(Color.parseColor("#5e9c00")));

毎回ActionBarオブジェクトを作成する必要はありません...


1
テキストとしてではなく、リソースを使用して色を取得した方がよいでしょう。getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(android.R.color.black)));
Dinesh 2017

15

Nexus 4の人々では、これは色を灰色にしてしまうようです。

ActionBar bar = getActionBar(); // or MainActivity.getInstance().getActionBar()
bar.setBackgroundDrawable(new ColorDrawable(0xff00DDED));
bar.setDisplayShowTitleEnabled(false);  // required to force redraw, without, gray color
bar.setDisplayShowTitleEnabled(true);

(この投稿へのすべてのクレジットは、コメントに埋め込まれているので、ここに表示したいと思います) https://stackoverflow.com/a/17198657/1022454


2
WTHを理解しようとして無数の時間を費やした後、この答えは私を助けました。
Abdullah Umer 2014年

13

1行のコードを試してください:

getActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.MainColor)));

1
私のアプリはこの答えでクラッシュします。フラグメントで機能させるために、次のように変更しました。getActivity()。getActionBar()。setBackgroundDrawable(new ColorDrawable(getActivity()。getResources()。getColor(R.color.col_nar))); 、getActivity()。getActionBar()。setBackgroundDrawable(new ColorDrawable(getResources()。getColor(R.color.col_nar)))も試しました。。フラグメントが開かれるとすぐにクラッシュします。
ホセマヌエルアバルカロドリゲス2015

1
問題が見つかり、次のように動作します:ActionBar actionBar = getSupportActionBar();
ホセマヌエルアバルカロドリゲス2015

1
答えはアクティビティです。フラグメントで使用する場合は、フラグメントにgetActivity()。getActionBar()を使用する必要があります
SANAT

7

以下のコードを使用して、アクションバーのテキストとアクションバーの背景に異なる色を提供し、出力したいアクティビティに対してマニフェストのテーマの下で使用します:)

<style name="MyTheme" parent="@android:style/Theme.Holo.Light">
    <item name="android:actionBarStyle">@style/MyActionBar</item>
</style>

<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
    <item name="android:titleTextStyle">@style/TitleBarTextColor</item>
    <item name="android:background">YOUR_COLOR_CODE</item>
</style>

<style name="TitleBarTextColor" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="android:textColor">YOUR_COLOR_CODE</item>
</style>

5

これは、アクションバーの色を変更する方法です。

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Build;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;


public class ActivityUtils {

public static void setActionBarColor(AppCompatActivity appCompatActivity, int colorId){
    ActionBar actionBar = appCompatActivity.getSupportActionBar();
    ColorDrawable colorDrawable = new ColorDrawable(getColor(appCompatActivity, colorId));
    actionBar.setBackgroundDrawable(colorDrawable);
}

public static final int getColor(Context context, int id) {
    final int version = Build.VERSION.SDK_INT;
    if (version >= 23) {
        return ContextCompat.getColor(context, id);
    } else {
        return context.getResources().getColor(id);
    }
}
}

MainActivity.javaから、アクションバーの色を次のように変更します

    ActivityUtils.setActionBarColor(this, R.color.green_00c1c1);

5

アクティビティを拡張する場合は、次のコードを使用します

ActionBar actionbar = getActionBar();
actionbar.setBackgroundDrawable(new ColorDrawable("color"));

AppCompatActivityを拡張する場合は、次のコードを使用します

ActionBar actionbar = getSupportActionBar();
actionbar.setBackgroundDrawable(new ColorDrawable("color"));

2

このコードは役立つかもしれません

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
</style>
<style name="Theme.MyTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- customize the color palette -->
    <item name="colorPrimary">@color/material_blue_500</item>
    <item name="colorPrimaryDark">@color/material_blue_700</item>
    <item name="colorAccent">@color/material_blue_500</item>
    <item name="colorControlNormal">@color/black</item>

</style>
<style name="CardViewStyle" parent="CardView.Light">
    <item name="android:state_pressed">@color/material_blue_700</item>
    <item name="android:state_focused">@color/material_blue_700</item>
    <!--<item name="android:background">?android:attr/selectableItemBackground</item>-->
</style>


1

このコードを使用して、アクションバーの背景色を変更します。「res / values / themes.xml」を開き(存在しない場合は作成して)、追加します

<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- the theme applied to the application or activity -->
<style name="CustomActionBarTheme"
       parent="@android:style/Theme.Holo.Light.DarkActionBar">
    <item name="android:actionBarStyle">@style/MyActionBar</item>
</style>
 <!-- ActionBar styles -->
<style name="MyActionBar"
       parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
    <item name="android:background">@drawable/actionbar_background</item>
</style>

注:このコードはAndroid 3.0以降のバージョンでのみ機能します


1

これは私にとって、AppCompatActivityにとってはうまくいきました、

    <item name="actionBarStyle">@style/BlackActionBar</item>
</style>

<style name="BlackActionBar" parent="@style/Widget.AppCompat.ActionBar.Solid">
    <item name="background">@android:color/black</item>
    <item name="titleTextStyle">@style/BlackActionBarTitleTextStyle</item>
</style>

<style name="BlackActionBarTitleTextStyle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="android:textColor">@android:color/white</item>
    <item name="android:fontFamily">@font/cinzel_decorative</item>
</style>

1

API 21以上を使用している人にとっては非常にシンプルです。以下のこのコードを使用してください

Dark ActionBar用

<resources>
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="android:background">@color/colorDarkGrey</item>
</style>

for_LightActionBar

<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.ActionBar">
    <item name="android:background">@color/colorDarkGrey</item>
</style>


0

これを使用して、それは動作します。

ActionBar actionbar = getActionBar();
actionbar.setBackgroundDrawable(new ColorDrawable("color"));

0

時々、このオプションはNullPointerExceptionをスローします

ActionBar actionbar = getActionBar(); actionbar.setBackgroundDrawable(new ColorDrawable("color"));

しかし、このオプションは私のために働いています。これを試すことができます。

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#FFFFFF")));

ハッピーコーディング


0

androidx AppCompactを使用している場合。以下のコードを使用してください。

androidx.appcompat.app.ActionBar actionBar = getSupportActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable("Color"));

-2
getActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.TabColor)));

color.xmlファイル:

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