一个不一样的凸起按钮(raised button)
原文:A different raised button behavior
自动引入Material Design之后,安卓有了三种按钮:
-
浮动操作按钮
-
凸起按钮(Raised buttons)
-
扁平按钮
根据说明文档,凸起按钮的定义是:
A typically rectangular material button that lifts and displays ink reactions on press.
但是为什么要抬起呢?难道你的手指是磁铁吗?当你按下一个真实的按钮,压力会使按钮下陷才对。
默认的实现
安卓使用这个[StateListAnimator](https://img.paonet.com/upload-images-old/platform/frameworks/base/ /master/core/res/res/anim/button_state_list_anim_material.xml)来抬起凸起按钮。
从那个文件我们可以看到:
当按下按钮,发生z轴位移(4dp),将按钮从2dp提高到6dp。
当按钮没有被按下时,elevation为2dp。
当按钮禁用时,elevation变为0dp。
我所做的就是创建一个类似的,但是和它使用正的z-translation和2dp elevation不同,我把两者都设为0.
让按钮下陷
这里是一个能让按钮下陷的StateListAnimator:链接。
现在你可以使用android:stateListAnimator属性把它设置到按钮上,但是这个方法不能让你使用另外的elevation,因为其值是硬编码的。
鉴于这个原因,我创建了一个自定义的StateListAnimator,可以在代码中使用传递给view的elevation。
你可以在这里获得它:RaiflatButton。(名字很丑,但想不出更好的了)。
现在你只需把普通的按钮替换成:
<com.github.rubensousa.raiflatbutton.RaiflatButton
android:id="@+id/normalButton"
style="@style/Base.Widget.AppCompat.Button.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Colored" />
<com.github.rubensousa.raiflatbutton.RaiflatImageButton
android:id="@+id/imageButton"
style="@style/Base.Widget.AppCompat.Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_android" />
这里是一个简短的预览效果:
怎么样,看起来是不是自然多了?