楕円形の境界線が必要なボタンがいくつかあります。
だから私はcapsule_border.xmlにこれを持っています
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<corners Android:radius="9999dp"/>
<stroke
Android:width="1px"
Android:color="@color/border_gray" />
</shape>
そして、必要な場所でAndroid:background="@drawable/capsule_border.xml
を使用します。
ここで、この楕円形の境界線を持つボタンと、視覚的なフィードバック用のAndroid:background="?selectableItemBackground"
が必要です。
SelectableItembackgroundで親レイアウトを使用し、capsule_borderでボタンを使用しようとしました。しかし、強調表示されるクリック可能な領域は正方形全体のようです。カプセルの境界内の領域だけではなく。
SelectableItemBackgroundがビューの長方形全体ではなく、描画した境界内でのみ表示されるようにする方法はありますか?
round_corners.xmlを持つ:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle">
<solid Android:color="@Android:color/transparent"/>
<corners Android:radius="15dp" />
<stroke
Android:width="1px"
Android:color="#000000" />
</shape>
そしてmy_ripple.xml:
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:color="?android:attr/colorControlHighlight">
<item Android:id="@Android:id/mask">
<shape Android:shape="rectangle">
<solid Android:color="#000000" />
<corners Android:radius="15dp" />
</shape>
</item>
<item Android:drawable="@drawable/round_corners" />
</ripple>
そしてボタン:
<Button
Android:background="@drawable/my_ripple"
... />
結果は次のようになります。
this の記事を参照してください。
私は最初の答えのより単純なバージョンを持っています:
<ripple
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:color="?colorControlHighlight"> <!-- default ripple color -->
<item>
<!-- the background shape when it's not being clicked -->
<shape Android:shape="rectangle">
<solid Android:color="@color/colorPrimary" />
<corners Android:radius="32dp" />
</shape>
</item>
</ripple>
背景として適用するだけですが、Button
に適用する場合は、影を削除することを忘れないでください。
style="?borderlessButtonStyle"
幸運を!
これが2020年のより簡単な解決策です(?attr
構文を使用しているためAPI> = 21):
<ripple
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:color="?colorControlHighlight">
<!-- ???? the ripple's color (1) -->
<!-- ???? no `id` so our <shape> will be drawn and not just used as mask -->
<item>
<shape>
<corners Android:radius="9dp" />
<solid Android:color="@color/white" />
</shape>
</item>
</ripple>
(1)
テーマでcolorControlHighlight
をオーバーライドしない場合、波紋の色はAndroidのデフォルトになります。 doオーバーライドしても、Androidのデフォルトを使用したい場合は、代わりに?android:colorControlHighlight
を使用してください