Android小部件点击时的涟漪背景

3
我该如何让Android上小部件中的按钮在被点击时显示材料涟漪效果?
<LinearLayout
    android:id="@+id/button_power"
    style="@style/MyStyle">
    <ImageView
        android:id="@+id/image_view_power"
        android:layout_width="@dimen/widget_button_image_size"
        android:layout_height="@dimen/widget_button_image_size"
        android:layout_gravity="center_horizontal"
        android:contentDescription="power"
        android:src="@drawable/baseline_power_settings_new_24"
        android:tint="@color/primary_text" />

    <TextView
        android:id="@+id/text_view_power"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="On"
        android:textColor="@color/primary_text"
        android:textSize="@dimen/widget_button_text_size" />
</LinearLayout>

style.xml

<style name="MyStyle" parent="Base.Widget.AppCompat.Button.Borderless">
    <item name="android:layout_width">@dimen/button_height</item>
    <item name="android:layout_height">@dimen/button_height</item>
    <item name="android:minHeight">0dp</item>
    <item name="android:padding">8dp</item>
    <item name="android:minWidth">0dp</item>
    <item name="android:textAllCaps">false</item>
    <item name="android:drawablePadding">0dp</item>
    <item name="android:background">@color/white_pressed</item>
    <item name="android:clickable">true</item>
    <item name="android:focusable">true</item>
    <item name="android:orientation">vertical</item>
</style>

上文展示了我是如何使用线性布局来表示小部件的可点击按钮的。它还包括样式细节。
我尝试添加以下代码行:
android:background="?attr/selectableItemBackground"

我试图将属性添加到LinearLayout上,但在小部件上出现了“问题加载小部件”的错误提示。如果我将属性移动到样式本身,问题也会发生。

看起来我想要实现的效果是可能的,因为Android上的Google Drive小部件具有此效果。这是如何完成的?

谢谢!


按照这个答案操作,你的问题将会得到解决。如何在简单布局中创建涟漪效果 - Pankaj Lilan
3个回答

2
将这些属性添加到您的LinearLayout中。
    android:clickable="true"
    android:focusable="true"
    android:foreground="?android:attr/selectableItemBackground"

注意:这不适用于 Android Lollipop 以下版本。

1

我正在使用

android:background="?selectableItemBackground"

问题在使用后得到解决。
android:background="?android:attr/selectableItemBackground"

0

你可以创建一个水波纹的可绘制对象:

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/colorPrimary">
    <item android:id="@android:id/mask">
        <shape android:shape="rectangle">
            <solid android:color="@android:color/white" />
        </shape>
    </item>
</ripple>

然后将此可绘制对象设置为您布局的背景


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接