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