波纹效果在 RelativeLayout 中不起作用

Posted

技术标签:

【中文标题】波纹效果在 RelativeLayout 中不起作用【英文标题】:Ripple effect does not work in 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_
    android:layout_
    tools:context=".MainActivity"
    android:background="@drawable/ripple">
</RelativeLayout>

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

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

【问题讨论】:

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

【讨论】:

以上是关于波纹效果在 RelativeLayout 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

颤振列表视图波纹效果不起作用

TextView垂直重力在ScrollView中不起作用

@font-face 在 Firefox 中不起作用 [重复]

setLayoutParams() 在 API <= 23 中不起作用

layout_gravity 在水平线性布局中不起作用

通过单击整个小部件来启动活动在 Android Studio 中不起作用