106

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

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

4

13 に答える 13

188

このスレッドでは、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);

}
于 2010-02-18T01:26:51.637 に答える
18

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

他のすべてのアクティビティが子であるスーパークラスでタイトルバーを宣言しているため、バーの色を一度だけ変更する必要があります。アイコンも追加して、バーのテキストを変更したいと思います。私はいくつかのテストを行い、(s​​etFeatureDrawable と 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);

(テキストビューを保護されたクラス変数として宣言する必要があります)

そして、この力は、アプリのどこでも (たとえば、すべてのアクティビティがこのクラスの子である場合)、呼び出すだけでよいことです。

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>
于 2010-04-27T13:24:09.250 に答える
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));
  }
}
于 2010-12-02T19:26:41.473 に答える
9

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

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

}
于 2016-11-21T20:10:26.457 に答える
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);
      }
    }

上記のコードでは、タイトルバーの代わりにタイトルを使用できます。 これは、アプリケーションのすべてのアクティビティに影響します

于 2013-04-05T11:49:03.243 に答える
2

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

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

TextView title = (TextView)findViewById(android.R.id.title);
于 2010-02-17T23:05:27.523 に答える
2

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

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

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

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

于 2010-02-12T12:38:08.250 に答える
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-ching-the-title-bar-background/

于 2013-04-05T11:12:41.210 に答える
2

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>

)

于 2014-10-14T16:36:36.137 に答える
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

于 2017-12-07T05:31:13.287 に答える