android 的button 应该是几乎每天都用到的控件了吧,但是他的点击效果很难控制,很烦。。。
先来看看官方的默认button
<android.support.v7.widget.AppCompatButton
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_gravity="center"
android:layout_marginTop="150dp" />
简书不能上传视频,只能传GIF格式的,有点烦。。
nomal_button.2018-12-06 14_52_07.gif
感觉挺好看的,有阴影,有波纹,好像还有点点击时颜色加深
但是我们一般的话都是得加个背景色,或者加个边框啥的。。
android:background="@color/black_4A4A4A"
black_button.2018-12-06 14_50_52.gif
设置这个属性之后,就只有阴影了,没有那个波纹效果了,有点难受
还有一个属性backgroundtint 这个属性只有在21以上才能用,
看看效果:
android:backgroundTint="@color/black_4A4A4A"
black_tint.2018-12-06 15_07_06.gif
这个有阴影和波纹 看起来挺好
那么backroundTint是个啥东西呢?
请看这个:https://blog.csdn.net/huangxiaoguo1/article/details/63282956
感兴趣的话可以去看看。
但是这个tint只能设置颜色,如果我们想做成一个圆角的button,这个方法就没用了。
是不是没办法了呢?
将就一下:
或者我们可以自己写一个波纹效果ripple。这个也是21以上才能用的。
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/xxxxx">
<item android:drawable="@drawable/xxxx" />
</ripple>
android:color 这个颜色就是波纹的颜色,
默认是有阴影的,不过我去掉了。。
自己写的好像不是那个好看。。
哪为了兼容4.4,只能再将就一下,点击时不要ripple了,设置两个drawable,点击的时候切换。
还有没有其他办法呢?
曾经真的以为button的点击效果就这样了,
难看的自定义波纹也只能将就了,
直到我遇到materialbutton,
让我见一次,就久久不能忘记她哪支持各种式样的波纹效果.
先来看看官方给的demo。
material.2018-12-06 16_08_06.gif material.2018-12-06 16_10_16.gif这样看起来没啥,主要是他的属性:
https://developer.android.com/reference/com/google/android/material/button/MaterialButton
Add icons to the start or center of this button of this button using the [app:icon]
, [app:iconPadding],
[app:iconTint],
[app:iconTintMode]and
[app:iconGravity]
Specify background tint using the [app:backgroundTint]= and
[app:backgroundTintMode]` attributes, which accepts either a color or a color state list.
Ripple color / press state color can be specified using the `[app:rippleColor] attribute. Ripple opacity will be determined by the Android framework when available. Otherwise, this color will be overlaid on the button at a 50% opacity when button is pressed.
Set the stroke color using the [app:strokeColor] attribute, which accepts either a color or a color state list. Stroke width can be set using the
[app:strokeWidth] attribute.
Specify the radius of all four corners of the button using the [app:cornerRadius]
attribute.
方法名 | 作用 |
---|---|
app:icon | 为button添加一个icon |
app:backgroundTint和backgroundTintMode | 为button添加一个背景色 |
app:rippleColor | 设置波纹颜色 |
app:cornerRadius | 为button设置圆角 |
app:strokeWidth | 设置边框宽度 |
app:strokeColor | 设置边框颜色 |
app:icon | 为button添加一个icon |
直接使用属性设置一个背景色和边框,岂不是美滋滋。。。
那就来试试吧:
官方提供来一下几种style:
<style name="Widget.MaterialComponents.Button.Icon">
<style name="Widget.MaterialComponents.Button.OutlinedButton">
<style name="Widget.MaterialComponents.Button.OutlinedButton.Icon">
<style name="Widget.MaterialComponents.Button.TextButton">
<style name="Widget.MaterialComponents.Button.UnelevatedButton">
<android.support.design.button.MaterialButton
android:layout_width="150dp"
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
android:layout_height="150dp"
android:layout_gravity="center"/>
material_outlined.2018-12-06 17_03_30.gif
看起来挺好,但是当我改变背景色的时候,问题来了。
device-2018-12-06-164539.png仔细看边框的4个角,她处理的好像不太好,
继续变大角度
<android.support.design.button.MaterialButton
android:layout_width="150dp"
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
android:layout_height="150dp"
app:backgroundTint="@color/red_dd2d34"
app:strokeColor="@color/black_000000"
app:strokeWidth="5dp"
app:cornerRadius="5dp"
android:layout_gravity="center"/>
device-2018-12-06-170756.png
为啥官方的好像没事呢?
点进去style看看就好了
<style name="Widget.MaterialComponents.Button.OutlinedButton" parent="Widget.MaterialComponents.Button.TextButton">
<item name="android:paddingLeft">@dimen/mtrl_btn_padding_left</item>
<item name="android:paddingRight">@dimen/mtrl_btn_padding_right</item>
<item name="strokeColor">@color/mtrl_btn_stroke_color_selector</item>
<item name="strokeWidth">@dimen/mtrl_btn_stroke_size</item>
</style>
<style name="Widget.MaterialComponents.Button.TextButton" parent="Widget.MaterialComponents.Button.UnelevatedButton">
<item name="android:textColor">@color/mtrl_text_btn_text_color_selector</item>
<item name="android:paddingLeft">@dimen/mtrl_btn_text_btn_padding_left</item>
<item name="android:paddingRight">@dimen/mtrl_btn_text_btn_padding_right</item>
<item name="iconTint">@color/mtrl_text_btn_text_color_selector</item>
<item name="iconPadding">@dimen/mtrl_btn_text_btn_icon_padding</item>
<item name="backgroundTint">@color/mtrl_btn_transparent_bg_color</item>
<item name="rippleColor">@color/mtrl_btn_text_btn_ripple_color</item>
</style>
<color name="mtrl_btn_transparent_bg_color">#00ffffff</color>
默认是把button的背景设为全透明,于是我给官方demo添加一个背景色后变成这样了:
demo_black.png哇,,,,想哭,,怎么会这样呢?
回去将就的自己写ripple吧!
网友评论