【问题标题】:Ripple effect does not work in RelativeLayout波纹效果在 RelativeLayout 中不起作用
【发布时间】:2015-11-03 14:15:06
【问题描述】:

我正在尝试在 API 22 上的 RelativeLayout 中实现涟漪效应,但它没有出现。然而,同样的涟漪在 Button 中起作用。

我的ripple drawable代码如下:

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="#d1c4e9">
    <item android:id="@android:id/mask"
        android:drawable="@android:color/white" />
    <item android:drawable="@drawable/rect"/>
</ripple>

相对布局代码如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:background="@drawable/ripple">
</RelativeLayout>

在此之后,波纹被设置为ButtonRelativeLayout 的背景。按钮上的波纹效果很好,但它根本没有出现在 RelativeLayout 上。

谁能告诉我我做错了什么?

【问题讨论】:

  • 这个波纹对象类是从哪里来的?
  • drawable-v21中的drawable吗?
  • 福尔摩斯:抱歉,我没听懂你的问题?
  • Raghunandan:是的,它在 drawable-v21 中,非常适合按钮,但不适用于相对布局
  • @VarunKumar 点击RelativeLayout 会发生什么。你还有其他孩子的观点吗?发布您的相对布局代码。 xml。让我们看看我们是否可以重现您的问题

标签: android button android-relativelayout rippledrawable


【解决方案1】:

添加此属性android:clickable="true" 有效。在 Nexus 5 上测试

【讨论】:

    【解决方案2】:

    除了 Rahunandan 说的,如果你使用 appcompat-v7 支持库你还需要添加 android:background="?attr/selectableItemBackground".

    【讨论】:

    • 如果你已经有一个背景属性,你应该如何添加另一个背景属性???
    • 如果您已经有背景属性,您可以设置前景属性。尝试尝试最适合您的 UI 的方法。尝试将现有背景设置为前景,将selectableItemBackground 设置为背景。如果设置前景对您不起作用,您可以在视图之外添加LinearLayout 并在LinearLayout 上设置android:background="?attr/selectableItemBackground"。希望这是有道理的。
    • 你是对的,它确实有很大帮助!所以我所做的只是将它设置为我的前景,我之前实际上已经这样做了但是我使用的颜色并不明显,现在它可以了。谢谢。
    【解决方案3】:

    布局中的这个属性。

    android:background="?attr/selectableItemBackground"
    android:clickable="true"
    

    【讨论】:

      【解决方案4】:

      在我的情况下,涟漪效应在第一次点击后起作用,但对于第一次点击它对我不起作用。已经用 android:state_activated="true" 和 main.xml android:clickable="true" 更改了背景选择器文件,那么它一直都可以正常工作。 p>

      selector.xml(在res\drawable\selector.xml下)

      <?xml version="1.0" encoding="utf-8"?>
      <selector xmlns:android="http://schemas.android.com/apk/res/android">
      <item android:state_activated="true" android:drawable="@drawable/card_bg_pressed" android:state_enabled="true" android:state_pressed="true"/>
      <item android:state_activated="true" android:drawable="@drawable/card_bg_focused" android:state_enabled="true" android:state_focused="true"/>
      <item android:state_activated="true" android:drawable="@drawable/card_bg_selected" android:state_enabled="false" android:state_selected="true"/>
      </selector>
      

      在activity_main.xml中

       <com.mysample.RecyclingImageView
          android:id="@+id/imageview_overlay"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_gravity="center_horizontal"
          android:background="@drawable/selector"
          android:clickable="true"/>
      

      【讨论】:

      • 什么意思?这里似乎没有涟漪。
      【解决方案5】:

      对我来说,这是可行的(API 23 及更高版本)

          android:background="@drawable/your_background"
          android:clickable="true"
          android:foreground="?attr/selectableItemBackground"
      

      【讨论】:

        猜你喜欢
        • 2018-03-15
        • 1970-01-01
        • 1970-01-01
        • 2022-01-23
        • 2021-10-21
        • 1970-01-01
        • 2018-03-22
        • 2020-08-23
        • 2016-11-03
        相关资源
        最近更新 更多