官网占楼,下面是个人使用的总结
- 首先肯定是导包
implementation 'com.google.android.material:material:1.2.0-alpha06'
- 包引入以后你就会发现可以在布局里写出
MaterialButton控件了
<com.google.android.material.button.MaterialButton
android:layout_width="@dimen/dp_60"
android:layout_height="wrap_content"
android:layout_gravity="right|top"
android:layout_marginTop="@dimen/dp_16"
android:layout_marginRight="@dimen/dp_16"
android:gravity="center"
android:text="@string/preview_ok"
app:backgroundTint="@color/colorBlue"
android:textColor="@color/colorWhite"
app:cornerRadius="@dimen/dp_5"/>
圆角和着色以及宽高都没有奏效
- 此时出现的几个坑
- 你会发现你设置的宽高属性并没有应用到
MaterialButton控件上,就连你为他backgroundTint着的颜色都不对,那么原因究竟为何呢? - 这是由于系统自身为
MaterialButton控件设置了默认的属性,所以你的操作其实并不会生效- 那么我们就要覆写这些
属性,让MaterialButton控件由我们管控
- 那么我们就要覆写这些
- 在res→values→styles.xml中添加如下属性
<style name="materialButton" parent="Widget.MaterialComponents.Button">
<item name="android:paddingLeft">8dp</item>
<item name="android:paddingRight">8dp</item>
<item name="android:paddingTop">4dp</item>
<item name="android:paddingBottom">4dp</item>
<item name="android:inset">0dp</item>
<item name="android:insetLeft">0dp</item>
<item name="android:insetRight">0dp</item>
<item name="android:insetBottom">0dp</item>
<item name="android:insetTop">0dp</item>
<item name="android:minWidth">0dp</item>
<item name="android:minHeight">0dp</item>
<item name="android:elevation">0dp</item>
</style>
- 这次看一下,竟然依旧没有奏效
- 究竟为何呢。
- 😄最后一步
- 在res→values→styles.xml中
AppTheme的parent要改为Theme.MaterialComponents.Light.NoActionBar
- 在res→values→styles.xml中
圆角和着色以及宽高都奏效
- 此时你的
MaterialButton就完全臣服于你啦- 需要注意的事:
- 如果没做最后一步会产生如下报错
Caused by: android.view.InflateException: Binary XML file line #42: Binary XML file line #42: Error inflating class com.google.android.material.button.MaterialButton
Caused by: android.view.InflateException: Binary XML file line #42: Error inflating class com.google.android.material.button.MaterialButton
- 看网上有说使用
implementation 'com.google.android.material:material:1.0.0-beta01'这个版本的依赖可以,But需要注意,如果你考虑使用TabLayout的话这个版本是没有TabLayoutMediator的。
哦哦 对啦,最后一点,主题为Theme.MaterialComponents.Light.NoActionBar时,你的checkbox等等控件,都需要你像MaterialButton一样处理,不然会像MaterialButton控件一样被系统默认着色成灰色
我是应用主题前的CheckBox,正常的白色
我是应用主题后的CheckBox,被系统着色成灰色
- 到这里需要注意的点就都介绍完了,
MaterialButton可以用起来了,不过要注意这些细节呦!