QMUI系列-QMUIRoundButton

1,807 阅读4分钟

写在开头

这是学习腾讯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.NoActionBarQMUI.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>

参数意义:

  1. android:layout_width:设置宽度,与其他控件使用一致,可以为精确值、match_parentwrap_content
  2. android:layout_height:设置高度,与其他控件使用一致,可以为精确值、match_parentwrap_content
  3. app:qmui_isRadiusAdjustBounds: 默认是true,表示圆角为短边的一半,如下:
    当设置为false时,如果没有设置圆角半径,则会是一个没有圆角的按钮,效果如下:
    当设置了下面的app:qmui_radius参数后,会覆盖该参数,为按钮设置圆角半径。
  4. app:qmui_radius:设置按钮的所有圆角半径。也可以使用下面的参数单独设置四个圆角的半径大小。效果如下:
  5. app:qmui_radiusTopLeft app:qmui_radiusTopRight app:qmui_radiusBottomLeft app:qmui_radiusBottomRight:设置四个圆角的大小。如果和上面app:qmui_radius同时设置,会覆盖上面所设置的值。例如:假设你同时设置app:qmui_radiusapp:qmui_radiusTopLeft的值,则最终的效果如下:
  6. app:qmui_borderColor:设置按钮的边界颜色
  7. app:qmui_borderWidth:设置按钮的边界宽度
  8. app:qmui_backgroundColor:设置按钮的背景色
  9. 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或不设置时,默认不改变按钮的整体透明度。