使背景继承自 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

之间的区别