1. ホーム
  2. アンドロイド

[解決済み】背景色のあるボタンにマテリアル効果を適用する。

2022-04-01 16:24:35

質問

Android v21対応ライブラリを使用しています。

背景色をカスタマイズしてボタンを作成しました。背景色を使用すると、波紋や表示などのマテリアルデザインの効果がなくなります(クリック時の昇降を除く)。

 <Button
 style="?android:attr/buttonStyleSmall"
 android:background="?attr/colorPrimary"
 android:textColor="@color/white"
 android:textAllCaps="true"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:text="Button1"
 />

<イグ 以下は通常のボタンで、エフェクトは問題なく動作しています。

<Button
 style="?android:attr/buttonStyleSmall"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:textAllCaps="true"
 android:text="Button1"
/>

<イグ

解決方法は?

を使用する場合 android:background の場合、ボタンのスタイルとルック&フィールの多くを空白の色に置き換えていることになります。

更新してください。 の時点では バージョン23.0.0リリース AppCompat があり、新たに Widget.AppCompat.Button.Colored のスタイルで、テーマの colorButtonNormal を無効化する色として使用し colorAccent は有効な色です。

を経由して直接ボタンに適用することができます。

<Button
  ...
  style="@style/Widget.AppCompat.Button.Colored" />

もし、カスタム colorButtonNormal または colorAccent を使用することができます。 ThemeOverlay で説明したように このプロヒント android:theme をボタン上に配置します。

前回の回答

v21のディレクトリにあるdrawableを背景として使用することができます。

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="?attr/colorControlHighlight">
    <item android:drawable="?attr/colorPrimary"/>
</ripple>

これにより、背景色が ?attr/colorPrimary で、デフォルトのリップルアニメーションは、デフォルトの ?attr/colorControlHighlight (必要であれば、テーマで設定することもできます)。

注:v21未満の場合はカスタムセレクタを作成する必要があります。

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

デフォルト、プレス済み、フォーカスの各状態に必要な色があると仮定します。個人的には、選択中の波紋のスクリーンショットを撮って、そこからプライマリ/フォーカスの状態を取り出しました。