使用具有白色背景颜色的 ?selectableItemBackground

新手上路,请多包涵

我一直在使用 android:background="?selectableItemBackground" 在单击视图(例如 LinearLayout )时产生连锁反应。我想我在某处读到它向后兼容 API 14。

但是,我发现我需要在白色背景下使用这种涟漪效果。具体来说,我有一个列表项的布局,它将显示在默认颜色背景上(我从 Theme.AppCompat.Light.NoActionBar 扩展),所以我希望列表项通过为列表着色从这个背景中脱颖而出项目纯白色 ( #FFFFFF )。

这是列表项布局:

 <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="?selectableItemBackground"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    ...

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:paddingLeft="@dimen/mdu_keyline_1"
        android:paddingRight="@dimen/mdu_keyline_1"
        android:paddingTop="@dimen/mdu_padding_normal"
        android:paddingBottom="@dimen/mdu_padding_normal">

        ...

    </LinearLayout>

</FrameLayout>

以上产生了没有白色背景的涟漪效果。

如果我尝试:

 <FrameLayout ...
    android:background="@color/white">

这显然会产生白色背景,但不会产生涟漪效应。

我还尝试了其他方法 - 这产生了最接近我正在寻找的结果:

 <FrameLayout ...
    android:background="@color/white">

    ...

    <LinearLayout ...
        android:background="?selectableItemBackground">

上面给了我带有涟漪效果的白色背景。 _然而_,无论我点击项目的哪一部分,波纹似乎总是从中心开始。

以下是显示当前结果的一些屏幕截图(忽略列表项顶部的阴影 - 这是来自 AppBarLayoutToolbar 我正在使用的阴影)。

在此处输入图像描述

在此处输入图像描述

我怎样才能达到预期的效果?

原文由 Farbod Salamat-Zadeh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 497
2 个回答

您可以使用 FrameLayout 的前景:

 <FrameLayout ...
    android:background="@android:color/white"
    android:foreground="?attr/selectableItemBackground">

原文由 pdegand59 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以在 drawables 文件夹中创建一个图层列表,并将其设置为您的背景:

 <?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@android:color/white"/>
    <item android:drawable="?attr/selectableItemBackground"/>
</layer-list>

原文由 Marcel50506 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题