レイアウトに触れるときに、単純な線形/相対レイアウトでリップル効果を得るにはどうすればよいですか?
レイアウトの背景を次のように設定しようとしました:
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:color="?android:colorControlHighlight" >
<item Android:drawable="@Android:color/white"/>
</ripple>
ただし、レイアウトに触れると、真っ白な背景のみが表示され、波紋効果は表示されません。私は何が間違っていますか?
編集:
参考までに、ここに私のレイアウトxmlファイルを示します。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="250dp"
Android:layout_height="250dp"
Android:background="@drawable/test"
Android:clickable="true">
</RelativeLayout>
これは意図したとおりに機能していることがわかります。標準のマテリアルテーマcolorControlHighlightの値は#40ffffff
です。したがって、白い背景では、これは表示されません。ハイライトの色を他の色に変更したり、オブジェクトの背景色を変更したりできます。
すべてに感謝します(特に私を正しい方向に向けてくれたAlanv)。
レイアウトにこれらのプロパティを設定します(レイアウトにデフォルトの白/明るい背景がある場合):
Android:clickable="true"
Android:focusable="true"
Android:background="?attr/selectableItemBackground"
この場合、カスタムのドロアブルは必要ありません。
ただし、レイアウトの背景が黒/濃い場合は、次のような独自のリップルドローアブルを作成する必要があります。
<?xml version="1.0" encoding="utf-8"?>
<!-- An white rectangle ripple. -->
<ripple xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:color="@Android:color/white">
<item
Android:id="@Android:id/mask"
Android:gravity="center">
<shape Android:shape="rectangle">
<solid Android:color="@Android:color/white"/>
</shape>
</item>
</ripple>
そして、このリップルドローアブルをAndroid:backgroundプロパティとして設定します。
AOSPには、これらのタイプのリップルの多くの例を見ることができます。 in here
Igor Ganapolsky の答えに加えて、これを追加します。誰かが異なる色のレイアウトを持ち、波及効果も持ちたい場合に備えて。次のようなドロウアブルにリップル効果を作成するだけです。
ripple.xml
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:color="@color/rippleColor"
tools:targetApi="Lollipop"> <!-- ripple effect color -->
<item Android:id="@Android:id/background">
<shape Android:shape="rectangle">
<solid Android:color="@color/backgroundColor" /> <!-- background color -->
</shape>
</item>
</ripple>
次に、レイアウトの背景またはボタンとして Igor Ganapolsky のように答えてください。
Android:clickable="true"
Android:background="@drawable/ripple"
任意のウィジェット(TextView
/Button
)で次のコードスニペットを変更する必要があり、リップル効果を実装できます。
Android:clickable="true"
Android:focusable="true"
Android:foreground="?attr/selectableItemBackground"
そして、あなたは行ってもいいです。
レイアウトにAndroid:clickable="true"
を設定します。
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:color="#cfd8dc"
tools:targetApi="Lollipop">
<item Android:id="@Android:id/mask">
<shape Android:shape="rectangle">
<solid Android:color="#d1c4e9" />
</shape>
</item>
</ripple>
これを使用してくださいDrawableフォルダーのripple.xml、それをビューの
Android:background = "@ drawable/ripple"
Android:clickable = "true"
Android:background="?selectableItemBackground"
でデフォルトのリップル効果を追加するだけです
いいね:
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="100dp"
Android:background="?selectableItemBackground"
Android:clickable="true"
>
...
</LinearLayout>
これをレイアウトに追加します。
Android:clickable="true"
Android:background="?attr/selectableItemBackground"
注:APIドキュメントにはバグがあります。 API> = 23でのみ動作します
すべてのAPIlevelsこれを使用 Solution
私はそれらの答えをすべて試してみましたが、何もうまくいきませんでした。そこで、次のスタイルを作成することを解決しました。
<style name="Button.Borderless" parent="Base.Widget.AppCompat.Button.Borderless">
<item name="Android:minHeight">0dp</item>
<item name="Android:minWidth">0dp</item>
<item name="Android:layout_marginLeft">-6dp</item>
<item name="Android:layout_marginRight">-6dp</item>
<item name="Android:paddingTop">0dp</item>
<item name="Android:paddingBottom">0dp</item>
<item name="Android:paddingLeft">6dp</item>
<item name="Android:paddingRight">6dp</item>
</style>
次に、線形レイアウトに適用しました。
<LinearLayout
Android:id="@+id/ll_my_ripple"
style="@style/Button.Borderless">
</LinearLayout>
これは、波及効果のあるサンプルレイアウトをクリックする例です。
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="?attr/selectableItemBackground"
Android:clickable="true"
Android:focusable="true"
Android:orientation="vertical">