单击按钮时如何在按钮上形成圆形纹波?

and*_*per 107 android button rippledrawable

背景

在Android的拨号器应用程序上,当您开始搜索某些内容,然后单击EditText左侧的箭头按钮时,会对其产生圆形连锁效果:

在此输入图像描述

问题

我也尝试过它,但我有一个矩形的:

    <ImageButton
        android:id="@+id/navButton"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="8dp"
        android:background="?android:attr/selectableItemBackground"
        android:src="@drawable/search_ic_back_arrow"/>
Run Code Online (Sandbox Code Playgroud)

这个问题

单击时如何使按钮具有圆形波纹效果?我是否必须创建一个新的drawable,或者是否有内置的方式?

bon*_*ond 248

如果您使用的是AppCompat主题,则可以将视图的背景设置为:

android:background="?selectableItemBackgroundBorderless"
Run Code Online (Sandbox Code Playgroud)

这将在21及以上添加圆形纹波,在21以下添加方形背景.

  • Android 9 中的 ImageView 不是圆形的。它是方形的 (4认同)
  • 在API 23中,'up'背景似乎是selectbleItemBackgroundBorderless的一半大小 (3认同)
  • 很好,最好的答案.TY (2认同)
  • 如果要在其他布局中使用它,则可能还需要在布局中使用“ android:clipChildren =“ false”`以允许动画传播。 (2认同)

Anr*_*ian 61

具有圆形波纹效果的另一个属性,特别适用于动作栏:

android:background="?actionBarItemBackground"
Run Code Online (Sandbox Code Playgroud)

  • 回答OP问题。应该标记为最佳答案。+1 (2认同)
  • @MeysamHadigheh `?` 是 `?attr/` 的快捷方式 (2认同)

Tho*_* R. 45

创建并设置一个可绘制的波纹作为背景.像这样的东西.

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/grey_15">
    <item android:id="@android:id/mask">
        <shape android:shape="oval">
            <solid android:color="?android:colorPrimary"/>
        </shape>
        <color android:color="@color/white"/>
    </item>
</ripple>
Run Code Online (Sandbox Code Playgroud)

  • 您可以将波纹绘制放在drawables-v21文件夹中.而对于前L使用简单的状态drawable.使用相同的文件名并将其放入drawable(默认)文件夹中. (2认同)
  • 您还可以创建样式.在values-v21文件夹中,创建一个新样式并将ripple drawable设置为背景.对于pre L,即在您的values文件夹styles.xml中,将相同样式的"selectableItemBackground"属性作为背景. (2认同)

Vol*_*kiv 15

您可以使用android:radiusxml中的属性创建圆形波纹绘制.

例:

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="your_color"
    android:radius="your_radius" />
Run Code Online (Sandbox Code Playgroud)

请注意,您your_radius应该小于您的视图宽度和高度.例如:如果您有大小的视图60dp x 60dp your_radius应该接近30dp(宽度/ 2或高度/ 2).

适用于Android 5.0及更高版本.


liv*_*ove 15

如果您已经有一个背景图像,这里有一个看起来接近selectableItemBackgroundBorderless的波纹示例:

            <ImageButton
                android:id="@+id/btn_show_filter_dialog"
                android:layout_width="24dp"
                android:layout_height="24dp"
                android:background="@drawable/ic_filter_state"/>
Run Code Online (Sandbox Code Playgroud)

ic_filter_state.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_pressed="true"
        android:state_enabled="true"
        android:drawable="@drawable/state_pressed_ripple"/>
    <item
        android:state_enabled="true"
        android:drawable="@drawable/ic_filter" />
</selector>
Run Code Online (Sandbox Code Playgroud)

state_pressed_ripple.xml :(白色背景上的不透明度设置为10%)1AFFFFFF

 <?xml version="1.0" encoding="UTF-8"?>    
    <ripple xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <shape android:shape="oval">
                <solid android:color="#1AFFFFFF"/>
            </shape>
            <color android:color="#FFF"/>
        </item>
    </ripple>
Run Code Online (Sandbox Code Playgroud)


小智 12

只需将此背景添加到您的视图 "android:background=?android:attr/actionBarItemBackground"


Ras*_*iri 9

2021 年更新:

你需要使用actionBarItemBackground作为背景

android:background="?android:attr/actionBarItemBackground"
Run Code Online (Sandbox Code Playgroud)

例子:

 <androidx.appcompat.widget.AppCompatImageButton
        android:layout_width="56dp"
        android:layout_height="56dp"
        android:background="?android:attr/actionBarItemBackground"
        android:src="@drawable/ic_copy" />
Run Code Online (Sandbox Code Playgroud)


Ali*_*ami 7

只需在您的活动 xml 中添加此项

           <ImageButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="?android:attr/actionBarItemBackground"
                app:srcCompat="@drawable/ic_arrow_drop_down_black_24dp" />
Run Code Online (Sandbox Code Playgroud)