ボタンにリップル効果を使用したい。 AppCompat v22.1では、AppCompatの色付けにAppCompatButtonと新しい機能が追加されました。
私のレイアウト:
<Android.support.v7.widget.AppCompatButton
Android:id="@+id/add_remove_button"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:backgroundTint="@color/primary"
Android:textColor="@Android:color/white"
Android:text="Remove" />
API 22テストデバイスでは、波及効果は完全に機能しますが、API 11向けにコーディングしていますが、残念ながらbackgroundTintにはAPI> = 21が必要です。古いAPIバージョンでボタンに波及効果を設定するにはどうすればよいですか?
リップルは、Android <21のビルドイン機能として使用できません。これはパフォーマンスの問題によるものです。新しいAPIを搭載したデバイスは、古いデバイスでは使用できないRenderThreadを使用できます。 http://Android-developers.blogspot.de/2014/10/appcompat-v21-material-design-for-pre.html
ロリポップ以前には波紋がないのはなぜですか? RippleDrawableをスムーズに実行できるのは、Android 5.0の新しいRenderThreadです。以前のバージョンのAndroidでパフォーマンスを最適化するために、RippleDrawableは今のところ省略しました。
API 21以下のリップル機能をサポートするには、ボタンの背景にドロウアブルを追加する必要があります。
<Android.support.v7.widget.AppCompatButton
Android:id="@+id/add_remove_button"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@drawable/button_ripple"
Android:backgroundTint="@color/primary"
Android:textColor="@Android:color/white"
Android:text="Remove" />
次に、drawableとdrawable-v21の両方のディレクトリに同じ名前のxmlを追加する必要があります(それらがない場合は作成でき、自動的にリンクされます)。
/res/drawable-v21/button_ripple.xml
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:color="@color/white">
<item>
<shape>
<solid Android:color="@color/white" />
</shape>
</item>
</ripple>
/res/drawable/button_ripple.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item>
<shape>
<solid Android:color="@color/white" />
</shape>
</item>
</selector>