写在开头
这是学习腾讯QMUI库的笔记,为该系列的第一篇,也是我自己写的第一篇博客,不足之处敬请谅解并不吝指出。
QMUI的优点及开源的目的我这里就不过多说明,如想了解,请移步官网:
qmuiteam.com/android/
如何使用
官网本身已经有入门的指导,可以查看:官网开始使用
下面简述我自己的配置过程
1. 引入依赖
// UI库
// https://mvnrepository.com/artifact/com.qmuiteam/qmui
// 这个是使用基本的UI控件所需要导入的库
implementation group: 'com.qmuiteam', name: 'qmui', version: '2.0.0-alpha08'
// 这个是使用UI库中的Fragment和Activity所需导入的库
// 然后就可以使用 arch 库提供的QMUIFragment、QMUIFragmentActivity、QMUIActivity来构建UI界面了
def qmui_arch_version = '2.0.0-alpha08'
implementation "com.qmuiteam:arch:$qmui_arch_version"
// 我用的开发语言是java, 所以这里使用的是annotationProcessor
annotationProcessor("com.qmuiteam:arch-compiler:$qmui_arch_version")
导入库的作用已在注释中说明!
其中最后一行,如果使用Kotlin的话,可以使用以下kapt插件方法导入:(也就是官网的配置方法)
kapt "com.qmuiteam:arch-compiler:$qmui_arch_version" // use annotationProcessor if java
但是需要注意的是,在Kotlin中使用kapt,需要先导入kapt插件,并且使用kapt插件的话,也需要先导入kotlin android支持插件。具体可参考官网
2. 配置主题
在res/values/styles文件中:将name为"AppTheme"的style标签中,将parent属性的值修改为QMUI.Compat.NoActionBar 或 QMUI.Compat,前者为我们项目常用的NoActionBar模式,会去掉ActionBar,后者则包含了ActionBar
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="QMUI.Compat.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
3. 布局文件中引入控件
基本用法跟我们使用Android内置的组件或自定义控件是一致的。 下面是我在xml布局文件中的使用示例:
file: activity_qmui_test.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
android:layout_width="100dp"
android:layout_height="50dp"
app:qmui_isRadiusAdjustBounds="false"
app:qmui_radius="4dp"
app:qmui_radiusTopLeft="4dp"
app:qmui_radiusTopRight="4dp"
app:qmui_radiusBottomLeft="4dp"
app:qmui_radiusBottomRight="4dp"
app:qmui_borderColor="#363B43"
app:qmui_borderWidth="1dp"
app:qmui_backgroundColor="#ffffff"
android:textColor="#363B43"
android:text="没有圆角" />
</LinearLayout>
参数意义:
android:layout_width:设置宽度,与其他控件使用一致,可以为精确值、match_parent或wrap_contentandroid:layout_height:设置高度,与其他控件使用一致,可以为精确值、match_parent或wrap_contentapp:qmui_isRadiusAdjustBounds: 默认是true,表示圆角为短边的一半,如下: 当设置为
false时,如果没有设置圆角半径,则会是一个没有圆角的按钮,效果如下: 当设置了下面的
app:qmui_radius参数后,会覆盖该参数,为按钮设置圆角半径。app:qmui_radius:设置按钮的所有圆角半径。也可以使用下面的参数单独设置四个圆角的半径大小。效果如下:
app:qmui_radiusTopLeftapp:qmui_radiusTopRightapp:qmui_radiusBottomLeftapp:qmui_radiusBottomRight:设置四个圆角的大小。如果和上面app:qmui_radius同时设置,会覆盖上面所设置的值。例如:假设你同时设置app:qmui_radius和app:qmui_radiusTopLeft的值,则最终的效果如下:
app:qmui_borderColor:设置按钮的边界颜色app:qmui_borderWidth:设置按钮的边界宽度app:qmui_backgroundColor:设置按钮的背景色android:textColor:设置文字的颜色,与普通控件一致。
4. 通过ColorStateList指定状态参数
可以在ColorStateList中指定按钮在不同状态下的参数,至于什么是ColorStateList,可以参看安卓官方文档。
首先在res/color/round_button_background.xml中设置背景随状态变化的参数
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
// 按钮失效时生效,即按钮设置setEnabled(false)
<item android:color="@color/color_50_white" android:state_enabled="false"/>
// 按钮按下时生效
<item android:color="@color/color_50_black" android:state_pressed="true"/>
// 默认值
<item android:color="@color/color_white"/>
</selector>
其中color_50_white为透明度为50%的白色,具体值为: #80FFFFFF,
color_50_black为透明度为50%的黑色,具体值为:#80000000
color_white为白色,具体值为:#ffffff
其次在res/color/round_button_text.xml中设置文字及边界随状态变化的参数
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
// 按钮失效时生效,即按钮设置setEnabled(false)
<item android:color="@color/color_50_black" android:state_enabled="false"/>
// 按钮按下时生效
<item android:color="@color/color_white" android:state_pressed="true"/>
// 默认值
<item android:color="@color/color_black"/>
</selector>
颜色具体值同上。
然后就是在布局文件中应用的ColorStateList,如下:
<com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
...
// 应用文字ColorStateList
android:textColor="@color/round_button_text"
// 应用背景ColorStateList
app:qmui_backgroundColor="@color/round_button_background"
// 应用边界ColorStateList,这个与文字相同即可,也可以另外设置
app:qmui_borderColor="@color/round_button_text"
.../>
5. 其他设置参数
mRoundButton.setChangeAlphaWhenPress(true);
当设置为true时,会在按钮按下的时候改变整体的透明度。默认值为false,即设置为false或不设置时,默认不改变按钮的整体透明度。