1. ホーム
  2. android

[解決済み] カスタムタイトルバーの背景色のグラデーションをプログラムで設定するには?

2023-05-07 11:38:49

質問

SOにはカスタムタイトルバーを実装するチュートリアルや質問がたくさんあります。 しかし、私のカスタムタイトルバーでは、背景にカスタムグラデーションを使用しており、私のコードで動的に設定する方法を知りたいです。

私のカスタムタイトルバーが呼び出される場所はここです。

requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.foo_layout);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_bar); 

そして、これは私の custom_title_bar :

<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="@layout/custom_title_bar_background_colors">
<ImageView   
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:src="@drawable/title_bar_logo"
              android:gravity="center_horizontal"
              android:paddingTop="0dip"/>

</LinearLayout>

見ての通り、リニアレイアウト上の背景はこいつで定義されています。

<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient 
    android:startColor="#616261" 
    android:endColor="#131313"
    android:angle="270"
 />
<corners android:radius="0dp" />
</shape>

私がやりたいことは、これらのグラデーションカラーを私のコードで動的に設定することです。 現在のように、XML ファイルにハードコードすることはしたくありません。

背景のグラデーションを設定するためのより良い方法があれば、私はすべてのアイデアを受け入れることができます。

事前にありがとうございます!

どのように解決するのですか?

コードでこれを行うには、GradientDrawableを作成します。

角度と色を設定する機会はコンストラクタの中だけです。 色や角度を変更したい場合は、新しいGradientDrawableを作成し、それを背景として設定するだけです。

    View layout = findViewById(R.id.mainlayout);

    GradientDrawable gd = new GradientDrawable(
            GradientDrawable.Orientation.TOP_BOTTOM,
            new int[] {0xFF616261,0xFF131313});
    gd.setCornerRadius(0f);

    layout.setBackgroundDrawable(gd);

これを動作させるために、以下のようにメインのLinearLayoutにidを追加しています。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainlayout"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
<ImageView   
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:src="@drawable/title_bar_logo"
              android:gravity="center_horizontal"
              android:paddingTop="0dip"/>

</LinearLayout>

また、これをカスタムタイトルバーとして使用する場合

    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.custom_title_bar);
    View title = getWindow().findViewById(R.id.mainlayout);
    title.setBackgroundDrawable(gd);