Button: 即使用按钮,用户只需单击一下即可执行操作并做出选择,并带有点击效果以及各种样式。
#1. 在使用 Material Buttons 按钮之前,建议将项目移至androidx,然后我们需要添加一个依赖: 在build.gradle中:
allprojects { repositories { google() jcenter() } }在dependencies中:
dependencies { // ... implementation 'com.google.android.material:material:<version>' // ... }cc:这样还不够,还需要更改您的应用程序主题以从Material Components主题中继承,示例:
<style name="AppTheme" parent="Theme.MaterialComponents.Light"> <!-- ... --> </style>
#2. 上面简单讲一下,下面进入主题。 MaterialButton包括以下五种:(这篇只涉及前三种使用)
#1. Text button #2. Outlined button #3. Contained button #4. Toggle button #5. FloatingActionButton先附上效果:
## Text button
<Button android:id="@+id/textButton" style="@style/Widget.MaterialComponents.Button.TextButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Text button" />## Outlined button
<Button android:id="@+id/outlinedButton" style="?attr/materialButtonOutlinedStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Outlined button" />## Contained button(Button)
<Button style="?attr/materialButtonStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Contained button" /> <!--或者--> <!--Button style默认指定Widget.MaterialComponents.Button/?attr/materialButtonStyle--> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Contained button" />### 他们还都支持添加icon:) 只需要更改在style在后面加上.Icon
style="@style/Widget.MaterialComponents.Button.TextButton.Icon" style="@style/Widget.MaterialComponents.Button.OutlinedButton.Icon" style="@style/Widget.MaterialComponents.Button.Icon"它可以只有一个Icon,不带文字的按钮:
<!--实现只有icon的按钮 --> <Button android:id="@+id/onlyIconButton" style="@style/Button.GraphikSemiBold.Green" android:layout_width="60dp" android:layout_height="60dp" android:layout_margin="10dp" app:cornerRadius="30dp" app:elevation="10dp" app:icon="@drawable/ic_plus" app:iconGravity="textStart" app:iconSize="30dp" />### 属性示例:
<Button android:id="@+id/containedIconButton" style="@style/Widget.MaterialComponents.Button.Icon" android:layout_width="wrap_content" android:layout_height="50dp" android:layout_marginBottom="10dp" android:insetTop="0dp" android:insetBottom="0dp" android:text="Contained button" app:backgroundTint="@color/colorAccent" app:cornerRadius="14dp" app:elevation="15dp" app:icon="@drawable/ic_plus" app:iconGravity="textStart" app:iconSize="30dp" app:rippleColor="@color/colorWhite" /> android:insetTop/insetBottom //设置0dp可以让按钮的高度全充满设置的高度(layout_height) app:backgroundTint //设置按钮填充的背景色 app:rippleColor//点击效果(水波纹)覆盖色 app:cornerRadius //设置按钮圆角 app:strokeColor //设置按钮线框颜色 app:elevation //设置按钮的海拔高度,可以理解为按下时的阴影效果,更高的海拔高度增加了内置按钮的突出度 app:icon //给按钮添加Icon app:iconGravity//Icon在按钮中的位置,相对于Text的位置有四种textStart/textEnd/start/end;所以它不能显示在上下 app:iconSize //控制Icon显示的尺寸### 另外,如果有需要设置按钮的状态(checkable/checked/enabled),可以去自定义,需要使用selector来设置各种状态的颜色:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:alpha="1.00" android:color="@color/colorBlack" android:state_enabled="true"/> <item android:alpha="1.00" android:color="@color/colorBlack" android:state_checkable="true" android:state_checked="true" android:state_enabled="true"/> <item android:alpha="0.60" android:color="?attr/colorOnSurface" android:state_checkable="true" android:state_checked="false" android:state_enabled="true"/> <item android:alpha="0.38" android:color="?attr/colorOnSurface"/> </selector>#### 最后,由上面发现MaterialComponents已经由默认都样式,如果想示例一样,由不同都需求显示,其实很麻烦的,所以...用style来优化(每次那么长一坨的一个按钮,自己不嫌弃,别人看的也累)
<!--TextButton--> <Button android:id="@+id/textButton" style="@style/TextButton.GraphikSemiBold.Green" android:layout_width="wrap_content" android:layout_height="40dp" android:text="Text button" android:textSize="12sp" /> <!--OutlinedButton--> <Button android:id="@+id/outlinedButton" style="@style/OutlinedButton.GraphikBold.Green" android:layout_width="wrap_content" android:layout_height="40dp" android:layout_marginBottom="4dp" android:text="Outlined button" app:cornerRadius="30dp" /> <!--Button--> <Button android:id="@+id/btnCheck" style="@style/Button.GraphikSemiBold.Green.Check" android:layout_width="120dp" android:layout_height="40dp" android:layout_marginBottom="5dp" android:text="Check" app:icon="@drawable/ic_plus" />是不是眼前一亮~,来看下具体的styles_button.xml(下面只展示:Button.GraphikSemiBold.Green.Check 相关的,其他的依葫芦画瓢):
<style name="Button" parent="Widget.MaterialComponents.Button"> <item name="android:textColor">@color/colorWhite</item> <item name="android:textSize">14sp</item> <item name="android:insetTop">0dp</item> <item name="android:insetBottom">0dp</item> <item name="android:textAllCaps">false</item> <item name="android:gravity">center</item> <item name="backgroundTintMode">src_atop</item> <item name="backgroundTint">@color/colorPrimary</item> <item name="elevation">10dp</item> <item name="rippleColor">@color/colorWhite</item> <item name="iconTintMode">src_atop</item> <item name="iconTint">@color/colorWhite</item> <item name="iconGravity">textStart</item> <item name="iconPadding">0dp</item> <item name="iconSize">20dp</item> </style> <style name="Button.GraphikSemiBold"> <item name="android:fontFamily">@font/graphik_semi_bold</item> </style> <style name="Button.GraphikRegularItalic"> <item name="android:fontFamily">@font/graphik_regular_italic</item> </style> <style name="Button.GraphikSemiBold.Green"> <item name="backgroundTint">@color/colorAccent</item> </style> <style name="Button.GraphikSemiBold.Purple"> <item name="backgroundTint">@color/colorPrimary</item> </style> <style name="Button.GraphikSemiBold.Purple.Apply"> <item name="cornerRadius">25dp</item> <item name="elevation">10dp</item> </style> <style name="Button.GraphikSemiBold.Green.Check"> <item name="cornerRadius">10dp</item> </style>
######## Material Design系列 - Button ########
# Material Design系列-MaterialButton(Icon)
# Material Design系列-Toggle Button(MaterialButtonToggleGroup/ShapeAppearance)
# Material Design系列-FloatingActionButton(FAB)
