1. ホーム
  2. android

[解決済み] Android標準のボタンを色違いに

2022-03-14 06:09:21

質問

クライアントのブランドイメージに合うように、Androidの標準ボタンの色を少し変えたいのですが、どうすればいいですか?

今のところ、これを実現する最も良い方法は Button にある drawable に変更します。 res/drawable/red_button.xml :

<?xml version="1.0" encoding="utf-8"?>    
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/red_button_pressed" />
    <item android:state_focused="true" android:drawable="@drawable/red_button_focus" />
    <item android:drawable="@drawable/red_button_rest" />
</selector>

しかし、そのためには、カスタマイズしたいボタンごとに3つの異なるdrawableを実際に作成する必要があります(静止状態のボタン用、フォーカス時のボタン用、押された時のボタン用の3つ)。 これは、私が必要とするよりも複雑で非DRYに思えます。

私が本当にしたいことは、ボタンにある種の色変換を適用することです。 私がやっているよりも簡単にボタンの色を変更する方法はありますか?

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

私は、これをすべて1つのファイルでかなり簡単に行えることを発見しました。 以下のようなコードを custom_button.xml を設定し background="@drawable/custom_button" をボタンビューで表示します。

<?xml version="1.0" encoding="utf-8"?>
<selector
    xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true" >
        <shape>
            <gradient
                android:startColor="@color/yellow1"
                android:endColor="@color/yellow2"
                android:angle="270" />
            <stroke
                android:width="3dp"
                android:color="@color/grey05" />
            <corners
                android:radius="3dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>

    <item android:state_focused="true" >
        <shape>
            <gradient
                android:endColor="@color/orange4"
                android:startColor="@color/orange5"
                android:angle="270" />
            <stroke
                android:width="3dp"
                android:color="@color/grey05" />
            <corners
                android:radius="3dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>

    <item>        
        <shape>
            <gradient
                android:endColor="@color/blue2"
                android:startColor="@color/blue25"
                android:angle="270" />
            <stroke
                android:width="3dp"
                android:color="@color/grey05" />
            <corners
                android:radius="3dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
</selector>