触摸布局时,如何在简单的线性/相对布局中产生涟漪效应?
我尝试将布局背景设置为:
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?android:colorControlHighlight" >
<item android:drawable="@android:color/white"/>
</ripple>
然而,在触摸布局时,我只看到纯白色背景并且没有涟漪效应。我做错了什么?
编辑:
供参考,这是我的布局xml文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="250dp"
android:layout_height="250dp"
android:background="@drawable/test"
android:clickable="true">
</RelativeLayout>
答案 0 :(得分:193)
在布局上设置这些属性(如果布局具有默认的白色/浅色背景):
android:clickable="true"
android:focusable="true"
android:background="?attr/selectableItemBackground"
在这种情况下,您不需要自定义绘图。
但是,如果您的布局有黑色/深色背景,那么您必须像这样创建自己的纹理:
<?xml version="1.0" encoding="utf-8"?>
<!-- An white rectangle ripple. -->
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@android:color/white">
<item
android:id="@android:id/mask"
android:gravity="center">
<shape android:shape="rectangle">
<solid android:color="@android:color/white"/>
</shape>
</item>
</ripple>
然后将此波纹绘制为 android:background 属性。
您可以在AOSP中看到许多这类涟漪的例子:in here
答案 1 :(得分:49)
除了Igor Ganapolsky的答案之外,我还添加了这个,以防有人想要使用不同颜色的布局并且还有涟漪效果。你只需在这样的drawable中创建一个涟漪效果:
ripple.xml
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:color="@color/rippleColor"
tools:targetApi="lollipop"> <!-- ripple effect color -->
<item android:id="@android:id/background">
<shape android:shape="rectangle">
<solid android:color="@color/backgroundColor" /> <!-- background color -->
</shape>
</item>
</ripple>
然后将其作为您的布局背景或其答案中提到的Igor Ganapolsky按钮。
android:clickable="true"
android:background="@drawable/ripple"
答案 2 :(得分:24)
您必须在任何小部件(<?xml version = "1.0" encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns = "http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id = "WebApp_ID" version = "3.0">
<display-name>User Management</display-name>
<servlet>
<servlet-name>Jersey RESTful Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.tutorialspoint</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Jersey RESTful Application</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
/ TextView
)中更改以下代码段,然后才能实施涟漪效应:
Button
你很高兴。
答案 3 :(得分:17)
事实证明这是按预期工作的。标准材质主题colorControlHighlight值为#40ffffff
。所以在白色背景上,这不会出现。将高亮颜色更改为其他内容可以起作用,和/或更改对象的背景颜色。
感谢所有人(特别是Alanv指出我正确的方向)。
答案 4 :(得分:9)
在布局上设置android:clickable="true"
。
答案 5 :(得分:4)
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:color="#cfd8dc"
tools:targetApi="lollipop">
<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<solid android:color="#d1c4e9" />
</shape>
</item>
</ripple>
在Drawable文件夹中使用此 ripple.xml ,然后将其分配为View的
android:background =“ @ drawable / ripple”
android:clickable =“ true”
答案 6 :(得分:2)
只需使用android:background="?selectableItemBackground"
<强>像:强>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="?selectableItemBackground"
android:clickable="true"
>
...
</LinearLayout>
答案 7 :(得分:0)
将它放入你的布局:
android:clickable="true"
android:background="?attr/selectableItemBackground"
注意:API文档中存在错误。它仅适用于 API&gt; = 23
对于所有API 级别,请使用此Solution
答案 8 :(得分:0)
我尝试了所有这些答案,没有任何对我有用,所以,我解决了创建以下风格的问题:
select col1, col2, col3
from table1
group by col1, col2, col3
having max(col5) keep (dense_rank last order by col4_date) = 'Hi';
然后,我申请了我的线性布局:
<style name="Button.Borderless" parent="Base.Widget.AppCompat.Button.Borderless">
<item name="android:minHeight">0dp</item>
<item name="android:minWidth">0dp</item>
<item name="android:layout_marginLeft">-6dp</item>
<item name="android:layout_marginRight">-6dp</item>
<item name="android:paddingTop">0dp</item>
<item name="android:paddingBottom">0dp</item>
<item name="android:paddingLeft">6dp</item>
<item name="android:paddingRight">6dp</item>
</style>
答案 9 :(得分:0)
这是单击带有波纹效果的示例布局的示例:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:orientation="vertical">