如何在textview android中实现圆形边框和?selectableItemBackground?

如何在textview android中实现圆形边框和?selectableItemBackground?,android,textview,material-design,material-components-android,material-components,Android,Textview,Material Design,Material Components Android,Material Components,我试图在一个水平方向的线性布局中有两个文本视图。现在,我想为每个文本视图提供以下内容: 左边的图标-使用android实现:drawableLeft=@drawable/ic\u Lightbull\u outline\u blue\u 24dp 文本视图周围的圆形边框-使用android:background=@drawable/round_border实现 此外,需要在触摸触摸物品时产生涟漪效应 第三点使用att在其他文本视图中实现 android:background="?sel

我试图在一个水平方向的线性布局中有两个文本视图。现在,我想为每个文本视图提供以下内容:

左边的图标-使用android实现:drawableLeft=@drawable/ic\u Lightbull\u outline\u blue\u 24dp

文本视图周围的圆形边框-使用android:background=@drawable/round_border实现

此外,需要在触摸触摸物品时产生涟漪效应

第三点使用att在其他文本视图中实现

android:background="?selectableItemBackground"
android:clickable="true"
但是圆形边界已经有了背景。现在我的问题是如何实现这种连锁反应?正在使用以下附件的唯一方式:

android:foreground="?selectableItemBackground"
Android显示此att在较低的api版本中不受支持


您可以使用选择器标记更改可绘制的背景

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:drawable="@drawable/button_pressed" /> <!-- pressed -->
    <item android:state_focused="true"
          android:drawable="@drawable/button_focused" /> <!-- focused -->
    <item android:state_hovered="true"
          android:drawable="@drawable/button_focused" /> <!-- hovered -->
    <item android:drawable="@drawable/button_normal" /> <!-- default -->
</selector>

这并不是你想要的。 你可以很容易地用一种风格完成类似的事情

比如:

    <com.google.android.material.button.MaterialButton
        style="@style/Widget.MaterialComponents.Button.OutlinedButton.Icon"
        app:icon="@drawable/ic_add_24px"
        android:text="...."
        .../>

使用以下代码可以同时实现涟漪效果和文本视图圆形背景

定制ripple drawable,需要API级别21+

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/grey">
    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <corners android:radius="10dp" />

            <stroke
                android:width="1dp"
                android:color="@android:color/holo_blue_dark" />
        </shape>
    </item>
    <item>
        <shape android:shape="rectangle">
            <corners android:radius="10dp" />
            <stroke
                android:width="1dp"
                android:color="@android:color/holo_blue_dark" />
        </shape>
    </item>
</ripple>
对于lollypop前,即API等级21以下

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false">
        <shape android:shape="rectangle">
            <solid android:color="@color/colorDarkGray"/>
        </shape>
    </item>
    <item android:state_pressed="false">
        <shape android:shape="rectangle">
            <solid android:color="@color/colorButtonGreen"/>
        </shape>
    </item>
    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <solid android:color="@color/colorButtonGreenFocused"/>
        </shape>
    </item>
</selector>

那么如何实现边框呢?我试着用按钮视图来实现,但是默认的按钮大小更大,在UI中看起来不成比例。所以我想用文本视图本身来实现这一点。我找到了关于图层列表的信息,这是否适合我的退休?在这种情况下,只需使用自定义样式更改尺寸。解决方案可行,但它显示了一个警告,该警告不受“API-21”支持。那么在这种情况下,边界本身可能不会出现?然后应该切换到简单使用android:前台=?selectableItemBackground
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/grey">
    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <corners android:radius="10dp" />

            <stroke
                android:width="1dp"
                android:color="@android:color/holo_blue_dark" />
        </shape>
    </item>
    <item>
        <shape android:shape="rectangle">
            <corners android:radius="10dp" />
            <stroke
                android:width="1dp"
                android:color="@android:color/holo_blue_dark" />
        </shape>
    </item>
</ripple>
 android:background="@drawable/custom_ripple"
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false">
        <shape android:shape="rectangle">
            <solid android:color="@color/colorDarkGray"/>
        </shape>
    </item>
    <item android:state_pressed="false">
        <shape android:shape="rectangle">
            <solid android:color="@color/colorButtonGreen"/>
        </shape>
    </item>
    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <solid android:color="@color/colorButtonGreenFocused"/>
        </shape>
    </item>
</selector>