selectableItemBackground

selectableItemBackground

我有几个按钮需要椭圆形的边框。

所以我在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的按钮。但是似乎突出显示的可点击区域是整个正方形。而不只是胶囊边界内的区域。

android - 以selectableItemBackground为背景的可绘制形状-LMLPHP

我是否可以做到这一点,以便selectableItemBackground不会高度显示 View 的整个矩形,而只在我绘制的边界内?

最佳答案

具有 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"
    ... />

将导致以下结果:

android - 以selectableItemBackground为背景的可绘制形状-LMLPHP

请参阅this文章。

10-08 05:43