使背景继承自 selectableItemBackground
Make background inherit from selectableItemBackground
现在我的视图 (framelayout)
android:background="?android:attr/selectableItemBackground"
我想给它添加一个底部边框(当它被激活时)。一种选择是使用
在内部再添加一层
android:background="@drawable/my_bgr"
但这有点蹩脚 - 无缘无故地增加了视图层次结构。
另一种选择是将我的可绘制对象作为视图的 bgr,但更改它以处理涟漪效应:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?android:attr/colorControlHighlight">
<item android:id="@android:id/mask">
<color android:color="@android:color/white" />
</item>
</ripple>
</item>
<item android:top="-2dp" android:right="-2dp" android:left="-2dp">
<selector>
<item android:state_activated="true">
<shape>
<solid android:color="@android:color/transparent" />
<stroke
android:width="2dp"
android:color="#FF0000" />
</shape>
</item>
</selector>
</item>
</layer-list>
这有点酷,但我不支持 minSdk=15(我该怎么做?)如果有一天我更改了应用程序的主题,这将保持涟漪效应。有什么方法可以从 selectableItemBackground "inherit" 添加边框吗?
好的,所以它可以为 21+ android 完成,其中 https://code.google.com/p/android/issues/detail?id=26251 是固定的。
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="?android:attr/selectableItemBackground" />
<item android:top="-2dp" android:right="-2dp" android:left="-2dp">
<selector>
<item android:state_activated="true">
<shape>
<solid android:color="@android:color/transparent" />
<stroke
android:width="2dp"
android:color="#910E12" />
</shape>
</item>
</selector>
</item>
</layer-list>
在此之前,我想我一直坚持在我的视图层次结构中再添加一层(第一层有 ?android:attr/selectableItemBackground,第二层是我的自定义边框背景)
将 <item android:drawable="?selectableItemBackground"/>
作为你的最后一层:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:left="-2dp"
android:right="-2dp"
android:top="-2dp">
<shape android:shape="rectangle">
<stroke
android:width="1dp"
android:color="#FF0000" />
<solid android:color="#FFFFFF" />
</shape>
</item>
<item android:drawable="?selectableItemBackground"/>
</layer-list>
请阅读此答案以了解 ?selectableItemBackground
和 ?android:attrs/selectableItemBackground
之间的区别
现在我的视图 (framelayout)
android:background="?android:attr/selectableItemBackground"
我想给它添加一个底部边框(当它被激活时)。一种选择是使用
在内部再添加一层 android:background="@drawable/my_bgr"
但这有点蹩脚 - 无缘无故地增加了视图层次结构。
另一种选择是将我的可绘制对象作为视图的 bgr,但更改它以处理涟漪效应:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?android:attr/colorControlHighlight">
<item android:id="@android:id/mask">
<color android:color="@android:color/white" />
</item>
</ripple>
</item>
<item android:top="-2dp" android:right="-2dp" android:left="-2dp">
<selector>
<item android:state_activated="true">
<shape>
<solid android:color="@android:color/transparent" />
<stroke
android:width="2dp"
android:color="#FF0000" />
</shape>
</item>
</selector>
</item>
</layer-list>
这有点酷,但我不支持 minSdk=15(我该怎么做?)如果有一天我更改了应用程序的主题,这将保持涟漪效应。有什么方法可以从 selectableItemBackground "inherit" 添加边框吗?
好的,所以它可以为 21+ android 完成,其中 https://code.google.com/p/android/issues/detail?id=26251 是固定的。
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="?android:attr/selectableItemBackground" />
<item android:top="-2dp" android:right="-2dp" android:left="-2dp">
<selector>
<item android:state_activated="true">
<shape>
<solid android:color="@android:color/transparent" />
<stroke
android:width="2dp"
android:color="#910E12" />
</shape>
</item>
</selector>
</item>
</layer-list>
在此之前,我想我一直坚持在我的视图层次结构中再添加一层(第一层有 ?android:attr/selectableItemBackground,第二层是我的自定义边框背景)
将 <item android:drawable="?selectableItemBackground"/>
作为你的最后一层:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:left="-2dp"
android:right="-2dp"
android:top="-2dp">
<shape android:shape="rectangle">
<stroke
android:width="1dp"
android:color="#FF0000" />
<solid android:color="#FFFFFF" />
</shape>
</item>
<item android:drawable="?selectableItemBackground"/>
</layer-list>
请阅读此答案以了解 ?selectableItemBackground
和 ?android:attrs/selectableItemBackground