?selectableItemBackgroundBorderless不工作

时间:2017-08-04 18:34:32

标签: android layout view

我正在尝试实现一个使用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>

6 个答案:

答案 0 :(得分:13)

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

尝试将android:background="@android:color/transparent"或任何其他背景设置为其父级。在你的情况下,它是LinearLayout。

答案 1 :(得分:5)

那条线不太对劲。使用:

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

答案 2 :(得分:1)

对我来说,当我使视图可点击时,问题就解决了。添加 android:clickable="true" 或以编程方式在视图上添加点击侦听器。

答案 3 :(得分:0)

如果您拥有API 21及更高版本,则可以尝试使用android:background="?android:attr/selectableItemBackgroundBorderless"

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

https://issuetracker.google.com/issues/111819099

解决方法的一个示例是改用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+,则至少也可以设置前景色调,以更改此效果的颜色。

答案 4 :(得分:0)

您应该在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" />

答案 5 :(得分:0)

我有类似的错误,可能是它可以帮助某人:

如果您的父母是 FrameLayout ,并且有另一个有背景的孩子,他们可以覆盖您的 selectableItemBackgroundBorderless