タイトルの背景色を設定する


106

私のAndroidアプリケーションでは、標準/基本のタイトルバーの色を変更したいと考えています。

あなたが持っているテキストの色を変更するにsetTitleColor(int color)は、バーの背景色を変更する方法はありますか?


背景色をタイトルバーに変更するためにカスタムタイトルを使用する必要はないと思います。この投稿をチェック
Deepthi Jabili

私は時代遅れの受け入れられたものの代わりにエドウィンファッドの答えを見ます。
zgc7009 2016年

回答:


186

このスレッドは、xmlファイルで独自のタイトルバーを作成し、アクティビティで使用することから始めます。

編集する

ここでは上記のリンクの内容を簡単に要約される-これがあるだけでなしサイズ変更、いいえボタン、ちょうど最も単純サンプル-テキストやタイトルバーの背景の色を設定します

res / layout / mytitle.xml-これはタイトルバーを表すビューです

<?xml version="1.0" encoding="utf-8"?>
<TextView
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/myTitle"
  android:text="This is my new title"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:textColor="@color/titletextcolor"
   />

res / values / themes.xml-デフォルトのAndroidテーマを維持し、タイトルの背景の背景色を変更するだけです。したがって、デフォルトのテーマを継承するテーマを作成し、背景スタイルを独自のスタイルに設定します。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="customTheme" parent="android:Theme"> 
        <item name="android:windowTitleBackgroundStyle">@style/WindowTitleBackground</item>   
    </style> 
</resources>

res / values / styles.xml-ここで、タイトルの背景に使用する色を使用するようにテーマを設定します

<?xml version="1.0" encoding="utf-8"?>
<resources> 
   <style name="WindowTitleBackground">     
        <item name="android:background">@color/titlebackgroundcolor</item>                   
    </style>
</resources>

res / values / colors.xml-必要な色をここに設定します

<?xml version="1.0" encoding="utf-8"?>
<resources>   
    <color name="titlebackgroundcolor">#3232CD</color>
    <color name="titletextcolor">#FFFF00</color>
</resources>

AndroidManifest.xml、(これだけの活動)タグ(全体のアプリケーションのための)アプリケーションまたは活動のいずれかのテーマの属性を設定します

<activity android:name=".CustomTitleBar" android:theme="@style/customTheme" ...

アクティビティ(CustomTitleBarと呼ばれる)から:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        setContentView(R.layout.main);
        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.mytitle);

}

9
ほとんどの場合、リンクを提供するだけで非常に安価になり、stackoverflowでは答えがあまり好きではありません。このページへのリンクから知識の一部を取得してみてください。あなたはコミュニティでますます知識を得るでしょう、そして、リンクがダウンしていても、あなたが答えると、他の人々をその方向に導くことができるいくつかの検索用語がまだ提供されます。
Janusz

7
@Janusz:あなたは完全に正しいです。つまり、上のリンクのスレッドを読む代わりに人々が始められるように、最も単純なサンプルで投稿を更新しました
ccheneson

3
Androidスタイルを上書きした後、背景色を変更したいだけの場合、コードからカスタムタイトルを追加する必要はありません
Janusz

1
Januszが言ったように、使用されたスタイルを上書きするだけの場合(新しいビューを追加しない場合)、カスタムビューを用意する必要はありません。その場合、FEATURE_CUSTOM_STYLEをリクエストする必要もありません。最後に、アプリケーションレベルでスタイルを定義して、すべてのアクティビティに一度に適用できます。ところで、コードをありがとう。
Eric Kok、

2
これはタイトルの背景色を変更するものではなく、テキストの色のみが変更されます。タイトルバーの色を変更している場合でも<color name = "titlebackgroundcolor">#3232CD </ color>。私は何か間違ったことをしていますか?
Shaista Naaz

18

この明確な説明に感謝しますが、リンクされた質問をすることで、あなたの回答にもう少し追加したいと思います(これは私の質問の基盤であるため、実際には新しい投稿をしたくありません)。

私は、他のすべてのアクティビティが子であるスーパークラスでタイトルバーを宣言しています。バーの色を一度だけ変更する必要があります。アイコンも追加して、バーのテキストを変更したいと思います。私はいくつかのテストを行い、どちらか一方を同時に変更できましたが、両方を同時に変更することはできませんでした(setFeatureDrawableとsetTitleを使用)。理想的な解決策はもちろん、リンクで指定されたスレッドの説明に従うことですが、スーパークラスで宣言しているため、setContentViewとR.id.myCustomBarのレイアウトが原因で問題が発生します。よく覚えているのは、setContentViewを1回だけ呼び出すことです...

編集 私の答えが見つかりました:

私のように、アプリのどこでもメニューを利用できるようにするのに最適なスーパークラスで作業したい場合は、ここでも同じように機能します。

これをスーパークラスに追加するだけです:

requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
    setContentView(R.layout.customtitlebar);
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.customtitlebar);
    customTitleText = (TextView) findViewById(R.id.customtitlebar);

(textviewを保護されたクラス変数として宣言する必要があります)

そして、これの力は、あなたのアプリのどこでも(たとえば、あなたのすべての活動がこのクラスの子である場合)、あなたはただ呼び出す必要があるということです

customTitleText.setText("Whatever you want in title");

タイトルバーが編集されます。

私の場合に関連付けられているXMLは(R.layout.customtitlebar)です。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:background="@color/background">
<ImageView android:layout_width="25px" android:layout_height="25px"
    android:src="@drawable/icontitlebar"></ImageView>
<TextView android:id="@+id/customtitlebar"
    android:layout_width="wrap_content" android:layout_height="fill_parent"
    android:text="" android:textColor="@color/textcolor" android:textStyle="bold"
    android:background="@color/background" android:padding="3px" />
</LinearLayout>

なぜ投票されるのですか?私のコードの何が問題になっていますか?それは私にとって完璧に機能します...
Sephy

1
初心者であることから、上記はわかりやすいコードの良い部分だと思います。あなたのための+1!
RK

@Sephyタイトルバーに別のクラスを作成する必要がありますか?
Vikas Gupta 2013年

そのは、ここで働いていませんstackoverflow.com/questions/31157222/...
アーディティヤ

11

背景色を変更する別の方法がありますが、これはハックであり、ウィンドウのビュー階層とそのタイトルが変更された場合、Androidの将来のバージョンでは失敗する可能性があります。ただし、このような場合、コードはクラッシュせず、必要な色を設定し損なうだけです。

onCreateなどのアクティビティで、次の操作を行います。

View titleView = getWindow().findViewById(android.R.id.title);
if (titleView != null) {
  ViewParent parent = titleView.getParent();
  if (parent != null && (parent instanceof View)) {
    View parentView = (View)parent;
    parentView.setBackgroundColor(Color.rgb(0x88, 0x33, 0x33));
  }
}

とても良いものでシンプルです。しかし、私はこれがコードからそれをしているので少し遅れていることをあなたに尋ねたいと思います。このような状況を回避するには、XMLにすべてを記述し、コードには何も記述しない必要があります。それで私を案内してくれませんか?
Shaista Naaz

上記の選択した答えであなたは解決策を持っていると思います。アクティビティのカスタムテーマを定義し、そのandroid:windowTitleBackgroundStyleを必要な色に設定する必要があります。
マイクプレート2011

7

このコードは、Androidでプログラムによってタイトルバーの背景を変更するのに役立ちます。色を任意の色に変更します。

public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout);
    getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#1c2833")));

}

これはAPI 11(3.0 Honeycomb)で導入されました。これは確かにこの時点で古く、これを有効なオプションと見なします。
zgc7009 2016年

しかし、私はまだtargetSdkVersion = "23"の最近のすべてのアプリケーションで非推奨の情報を取得せずにそれを使用しています。
エドウィンファッド2016年

もちろん、これを使用するのは100%罰金です。何も置き換えられていませんが、少なくとも互換性ライブラリがない場合は、API 11(ごく少数の人が行うことになる)の前にそれを使用することは避けてください。
zgc7009 2016年

了解しました。@ zgc7009
エドウィン

1
AppCompatActivityを使用している場合は、代わりにgetSupportActionBar()を使用してください
mondlos

6
protected void onCreate(Bundle savedInstanceState) {        
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    View titleView = getWindow().findViewById(android.R.id.title);
    if (titleView != null) {
      ViewParent parent = titleView.getParent();
      if (parent != null && (parent instanceof View)) {
        View parentView = (View)parent;
        parentView.setBackgroundColor(Color.RED);
      }
    }

上記のコードで、あなたが使用することができますしようとすることができ、タイトルの代わりに、タイトルバー アプリケーション内のすべての活動に影響します、これを


2

いいえ。タイトルのないアクティビティを作成し、アクティビティレイアウトで独自のタイトルバーを作成できます。

これを確認してください、63行目以下:

getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_1)

デフォルトのタイトルビューの代わりにカスタムビューを設定します。


どのように/どこでカスタム/独自のタイトルバーを作成できますか?
Thizzer 2010

2

platforms/android-2.1/data/res/layout/screen.xmlSDKをのぞいてみてください。そこでタイトルを定義しているようです。このようなレイアウトを頻繁に調べて借りることができます style="?android:attr/windowTitleStyle" て、独自のTextViewで使用およびオーバーライドできるスタイルをことができます。

次のようにして、直接調整するタイトルを選択することもできます。

TextView title = (TextView)findViewById(android.R.id.title);

1
上記の良い答えですが、カスタムレイアウトを作成せずにタイトルバーに色を付けることはできますか?
イーノ

2

次のコードで試してください

View titleView = getWindow().findViewById(android.R.id.title);
    if (titleView != null) {
      ViewParent parent = titleView.getParent();
      if (parent != null && (parent instanceof View)) {
        View parentView = (View)parent;
        parentView.setBackgroundColor(Color.RED);
      }
    }

このリンクも非常に便利です:http : //nathanael.hevenet.com/android-dev-changing-the-title-bar-background/


これはLollipopでも動作しますか?titleViewがnullを返すようです。
WORMSS 2015

1

Googleが提供するv7 appcompatサポートライブラリを使用して、タイトルバーの色を変更する簡単な方法があります。

このサポートライブラリのセットアップ方法については、次のリンクを参照してください。https//developer.android.com/tools/support-library/setup.html

それが終わったら、res / values / styles.xmlファイルに次の行を追加するだけで十分です。

<style name="AppTheme" parent="AppBaseTheme">
    <item name="android:actionBarStyle">@style/ActionBar</item>
</style>

<!-- Actionbar Theme -->
<style name="ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <item name="android:background">@color/titlebackgroundcolor</item>
</style>

(「titlebackgroundcolor」がres / values / colors.xmlで定義されていると仮定します。例:

<color name="titlebackgroundcolor">#0000AA</color>


Android 5 のみを対象とする場合、さらに簡単な代替案があります。[ developer.android.com/training/material/…を参照してください。
stefan.m 2014年

1

Android 5.0(APIレベル21)以降、状況は改善/容易になっています。

あなたが探しているのは次のようなものだと思います:

<style name="AppTheme" parent="AppBaseTheme">
    <!-- Top-top notification/status bar color: -->
    <!--<item name="colorPrimaryDark">#000000</item>-->
    <!-- App bar color: -->
    <item name="colorPrimary">#0000FF</item>
</style>

参照はこちらをご覧ください:

https://developer.android.com/training/material/theme.html#ColorPalette


1

"res"-> "values"-> "colors.xml"のスタイルカラー値を変更することでこれを行いました ここに画像の説明を入力してください

これでプロジェクト全体の色が変わりますが、私には問題ありません。

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


0

使用できます。

  toolbar.setTitleTextColor(getResources().getColor(R.color.white));

0

このコードをsetContentViewの後に、またはonCreateに貼り付けます

カラーコードがある場合は、これを使用してください。

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

Colorライブラリの特定のコードが必要な場合は、これを使用してください。

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