Android ?SelectableItemBackground无边框不工作

Android ?SelectableItemBackground无边框不工作,android,layout,view,Android,Layout,View,我试图实现一个使用Android默认itemBackground样式的视图(但是使用椭圆形背景,用于操作栏项目等)。不知何故,下面的视图根本没有显示背景。如果我将android:background更改为android:foreground,它只显示矩形,而不显示椭圆形。有人知道如何解决这个问题吗 <LinearLayout app:visibleGone="@{showProfile}" android:layout_width="wrap_content" an

我试图实现一个使用Android默认itemBackground样式的视图(但是使用椭圆形背景,用于操作栏项目等)。不知何故,下面的视图根本没有显示背景。如果我将android:background更改为android:foreground,它只显示矩形,而不显示椭圆形。有人知道如何解决这个问题吗

<LinearLayout
    app:visibleGone="@{showProfile}"
    android:layout_width="wrap_content"
    android:layout_height="26dp"
    android:layout_alignParentStart="true"
    android:gravity="center"
    android:paddingStart="16dp"
    android:paddingEnd="16dp">

       <ImageView
            android:background="?selectableItemBackgroundBorderless"
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:onClick="@{() -> profileCallback.onClick()}"
            android:src="@drawable/profile_image" />

</LinearLayout>

那句话不太正确。使用:

android:background="?android:attr/selectableItemBackgroundBorderless"

您的代码是正确的,但棘手的是父布局也需要背景


尝试将
android:background=“@android:color/transparent”
或任何其他背景设置为其父项。在您的情况下,它是线性布局。

如果您有API 21及以上版本,您可以尝试使用
android:background=“?android:attr/selectableitembackgroundless”

但是,在某些情况下(例如在ConstraintLayout内部,无论是否直接),这是一个已知的问题:

解决方法的一个示例是使用FrameLayout,仅用于单击效果。在这里:

        <FrameLayout
            android:id="@+id/button" ...
            android:clickable="true" android:focusable="true"
            android:foreground="?attr/selectableItemBackgroundBorderless">

            <androidx.appcompat.widget.AppCompatImageView
                android:layout_width="match_parent" android:layout_height="match_parent" .../>
        </FrameLayout>


如果您有API 21+,您至少也可以设置foregroundTint来更改此效果的颜色。

您应该在ImageView中使用android:focusable属性

<ImageView
        android:background="?selectableItemBackgroundBorderless"
        android:layout_width="24dp"
        android:layout_height="24dp"
        android:focusable="true"
        android:onClick="@{() -> profileCallback.onClick()}"
        android:src="@drawable/profile_image" />

我也有类似的错误,可能对某人有帮助:


如果您的家长是FrameLayout,并且有另一个具有背景的孩子,他们可以覆盖您的SelectableItemBackgroundless

当使用
?attr/SelectableItemBackgroundless
(我已经在另一个项目中使用过,效果很好)。当我用你的答案设置背景时,效果很好!谢谢!FWIW:我的应用程序主题是
android:theme.Material
(旧项目是
theme.AppCompat[…])
kitkat上的充气例外注意,这只能从API 21使用。爱你--{--{@它仍然显示涟漪效应,直到框架布局背景。在我的情况下,我需要涟漪效应是流出来的boundary@KingofMasses您是否尝试设置了
clipChildren=“false”
clipToPadding=“false”
在父视图上?是的,但它仍然仅在我的框架布局周围显示。例如,如果我尝试相同的方法?attr/SelectableItemBackgroundless on list item for recycler view按我的预期显示它。但不知道为什么它不起作用Framelayout@KingofMasses试着做一个POC。很多时候,我通过一个小项目找到了原因不用试原版了。好的,我会试一下,然后告诉你。谢谢