有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java应用程序小部件:当背景添加到外部布局时,列表项上的涟漪效应消失

这件事快把我逼疯了。下面是它的工作原理

1。所有内容都设置为默认值

  • 涟漪效应工程
  • 列表视图项分隔符可见

original state

2。小部件布局中添加了白色背景

  • 涟漪损失
  • 列表视图项分隔符也消失了
  • 看起来列表项样式已被删除

white background

这是密码

主窗口小部件布局

<LinearLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
              ...
              安卓:background="@安卓:color/white" -- this line only applies for case 2
              安卓:padding="@dimen/widget_padding">

    <TextView
        ...
        安卓:background="@color/primary"
        安卓:textColor="@安卓:color/white"/>

    <ListView
        ...
        安卓:drawSelectorOnTop="true""/>

    <TextView
        ...
        安卓:textColor="?安卓:attr/textColorSecondary"/>

</LinearLayout>

列表项布局

<RelativeLayout
    xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    ...
    安卓:id="@+id/widgetItem">

    <TextView
        ...
        安卓:textColor="@安卓:color/black"
        安卓:textSize="14sp"/>

    <TextView
        ...
        安卓:textColor="@color/negative_amount"
        安卓:textSize="16sp"
        安卓:textStyle="bold"/>

</RelativeLayout>

我花了一天的时间尝试了所有可能的组合,但没有任何效果。我不明白,列表视图周围的一些布局的无关背景更改完全改变了行为。WTF

我想以尽可能干净的方式解决它-即不使用自定义选择器进行黑客攻击。如果可能的话,这应该是开箱即用的


共 (1) 个答案

  1. # 1 楼答案

    看起来您的活动使用的是黑色主题,因此涟漪是白色的,因此在白色背景上不可见。最简单的解决方案是使用主题的灯光变体,这将导致波纹为黑色

    例如,如果您使用的是AppCompat主题,则可以将此行添加到ListView

    <ListView
        ...
        android:drawSelectorOnTop="true"
        style="@style/Theme.AppCompat.Light"/>
    

    您也可以将其应用于视图层次结构,例如:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          ...
          android:background="@android:color/white"
          android:padding="@dimen/widget_padding"
          android:theme="@style/Theme.AppCompat.Light">
    

    这将导致在LinearLayout及其所有子视图中使用主题

    此外,您还可以通过将android:theme属性添加到<activity><application>标记添加到AndroidManifest.xml来指定整个主题活动甚至整个应用程序