只需要修改一份配置表就可以调整 App 的全局样式,包括组件颜色、导航栏、对话框、列表等。一处修改,全局生效。
提供丰富常用的 UI 控件,例如 BottomSheet、Tab、圆角 ImageView、下拉刷新等,使用方便灵活,并且支持自定义控件的样式。
提供高效的工具方法,包括设备信息、屏幕信息、键盘管理、状态栏管理等,可以解决各种常见场景并大幅度提升开发效率。
ListView
支持添加/删除 Item 的动画,支持自定义动画效果。Dialog
的基础上重新定制了 show()
和 hide()
时的动画效果, 使 Dialog
在界面底部升起和降下。提供了以下两个面板样式:
QMUIBottomSheet.BottomListSheetBuilder
生成。QMUIBottomSheet.BottomGridSheetBuilder
生成。QMUIGroupListView
里的 Item,也可单独使用。支持以下样式:
MessageDialogBuilder
: 消息类型的对话框 Builder。通过它可以生成一个带标题、文本消息、按钮的对话框。ConfirmMessageDialogBuilder
: 带 Checkbox 的消息确认框 Builder。EditTextDialogBuilder
: 带输入框的对话框 Builder。MenuDialogBuilder
: 菜单对话框 Builder。CheckableDialogBuilder
: 单选类型的对话框 Builder。MultiCheckableDialogBuilder
: 多选类型的对话框 Builder。CustomDialogBuilder
: 自定义对话框内容区域的 Builder。AutoResizeDialogBuilder
: 随键盘升降自动调整 Dialog
高度的 Builderfloat: left
的浮动布局,从左到右排列子 View 并自动换行。支持以下特性:
View
之间的垂直/水平间距。View
的水平对齐方向(左对齐/居中/右对齐)。View
的个数或行数。TextView
在宽度固定的情况下,文字多到一行放不下时能缩小文字大小来自适应。ListView
而是 LinearLayout
,所以一般要配合 ScrollView
使用。提供了 Section 的概念,用来将列表分块。 配合 QMUIGroupListView.Section
, QMUICommonListItemView
和 QMUIGroupListSectionHeaderFooterView
使用。QMUIGroupListView
里每个 Section 的头部或尾部,也可单独使用。View
需要显示重复单元 ListView
的情景,cache 功能主要是保证在需要多次刷新数据或布局的情况下(ListView
或 RecycleView
的 itemView)复用已存在的 View
。QMUI 用于 QMUITabSegment
中 Tab
与数据的适配。TextView
能自动识别 URL、电话、邮箱地址,相比 TextView
有以下特点:
View
,支持颜色和大小的设置。ScrollView
,并能在滚动回调中获取每次滚动前后的偏移量。View
的任一方向旁边展示该浮层,支持自定义浮层出现/消失的动画。QMUIPopup
,在 QMUIPopup
的基础上,支持显示一个列表。xml
属性修改进度背景色,当前进度颜色,进度条尺寸。TextView
(继续自定义 View,而不是真正的 TextView
), 实现了 TextView
的 maxLine
、ellipsize
、textSize
、textColor
等基本功能。QMUITouchableSpan
配合使用实现内容可点击。QMUIQQFaceView
的内容解析器,将文本内容解析成 QMUIQQFaceView
想要的数据格式。QMUIQQFaceView
资源管理接口,使用 QMUIQQFaceView
必须实现这个接口以提供表情资源。Button
提供圆角功能,支持以下特性:
ColorStateList
。Drawable
可以方便地生成圆角矩形/圆形 Drawable
,提供设置背景色、描边大小和颜色、圆角自适应 View 高度等特性。TextView
,修正了两个常见问题:
TextView
与 ClickableSpan
一起使用时,点击 ClickableSpan
也会触发 TextView
的事件的问题。TextView
默认情况下如果添加了 ClickableSpan
之后就无法把点击事件传递给 TextView
的 Parent 的问题。Tab
的布局,包含多个特性:
xml
或 QMUITabSegment
提供的 set 方法统一配置文字颜色、icon 位置、是否要下划线等。Tab
都可以非常灵活的配置,内容上支持文字和 icon 的显示,icon 支持选中态,支持内容的排版对齐方向设置,支持显示红点,支持插入自定义的 View
,支持监听双击事件等。setupWithViewPager(ViewPager)
方法与 ViewPager
绑定。QMUITipDialog.Builder
生成,提供了一个图标和一行文字的样式, 其中图标有 Loading、成功、失败等类型可选。QMUITipDialog.CustomBuilder
生成,支持传入自定义的 layoutResId
。QMUITopBar
的包裹类,并代理了 QMUITopBar
的方法。配合 QMUIWindowInsetLayout
使用,可使 QMUITopBar
在支持沉浸式状态栏的界面中顶部延伸到状态栏。TextView
的基础上支持文字竖排。ClickableSpan
,支持 normal 态和 press 态时有不同的背景颜色以及字体颜色。建议配合 QMUISpanTouchFixTextView
或其子类使用,便于事件传递的协调。View
的 fitSystemWindows
。wrap_content
的 ListView
,解决原生 ListView
在设置高度为 wrap_content
时高度计算错误的 bug。Typeface
的方式设置 span
的字体,实现自定义字体的效果。ImageSpan
,在此基础上实现让 span
垂直居中的效果。QMUIMarginImageSpan
,在此基础上支持设置图片的左右间距。span
。AbsoluteSizeSpan
可以调整字体大小,但在中英文混排下由于decent的不同,无法根据具体需求进行底部对齐或者顶部对齐。而 QMUITextSizeSpan
则可以多传一个参数,让你可以根据具体情况来决定偏移值。View
。 更多可参考 wiki 文档。DisplayMetrics
实例。View
截图生成图片。Theme
下的 Attr
值,支持 Float
、Color
、ColorStateList
、Drawable
和 Dimen
类型的 Attr
。QMUIMarginImageSpan
能被更便捷地使用。MIUI
和 Flyme
,以及 5.0 以上版本的其他 Android
)。MIUI
和 Flyme
,以及 6.0 以上版本的其他 Android
)。ImageView
进行处理,可以按比例缩放图片。View
做背景颜色变化动画,支持多个动画参数。View
做进退场动画,支持透明度变化和上下位移两种方式。View
相关工具方法,如对 View
设置单个方向的 padding
、从 ViewStub
中获取一个 View
、判断 ListView
是否已经滚动到底部等等。最新的库会上传到 JCenter 仓库上,请确保配置了 JCenter 仓库源,然后直接引用:
implementation 'com.qmuiteam:qmui:1.2.0'
至此,QMUI 已被引入项目中。
把项目的 theme
的 parent
指向 QMUI.Compat
,至此,QMUI 可以正常工作。
你可以通过在项目中的 theme
中用 <item name="(name)">(value)</item>
的形式来覆盖 QMUI 组件的默认表现。具体可指定的属性名请参考 @style/QMUI.Compat
中的属性。
arch 库会依赖 qmui 库, 因此也需要引入 qmui 库
implementation com.qmuiteam:arch:0.3.1
QMUISwipeBackActivityManager.init(this);
如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。
最后针对Android程序员,我这边给大家整理了一些资料,包括不限于高级UI、性能优化、移动架构师、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技术;希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!