web-dev-qa-db-ja.com

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

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

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

106
Thys

この thread を使用すると、XMLファイルに独自のタイトルバーを作成し、アクティビティで使用することができます。

編集

上記のリンクの内容の簡単な概要は次のとおりです。これは、テキストの色とタイトルバーの背景を設定するためのjustです。サイズ変更、ボタンなし、最も単純なサンプル

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テーマを保持し、タイトルbackgroundの背景色を変更するだけです。そこで、デフォルトのテーマを継承するテーマを作成し、背景スタイルを独自のスタイルに設定します。

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

}
186
ccheneson

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

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

EDIT答えが見つかりました:

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

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

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

背景色を変更する別の方法がありますが、ハックであり、ウィンドウとそのタイトルのビュー階層が変更された場合、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));
  }
}
11
mikeplate
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);
      }
    }

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

6

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

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

}
6
Edwinfad

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

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

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

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

2
skyman

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

次の操作を行うことで、直接調整するタイトルを選択することもできます。

TextView title = (TextView)findViewById(Android.R.id.title);
2
Steve Pomeroy

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

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/

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

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>

1
stefan.m

「res」->「values」->「colors.xml」でスタイルの色の値を変更することでこれを行いました enter image description here

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

enter image description here

1
Brlja

使用できます。

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