背景故事

最近写到一个设置页的需求,里面加起来有十多项设置,每一项设置都有相应的业务逻辑。

刚开始,我说成,设置页嘛,简单,新建个布局文件,编写一个个layout,后来发现有很多设置项布局是一样的,可以直接复制之前的,但复制多几遍后,我感觉不对劲,这些View都是一样的,我感觉一直在写重复的代码。

不止如此,在代码进行数据初始化时,还需要给每个设置项定义id,然后通过id获取到各个不同的设置项,再进行相应的赋值操作。比如,我们要为每个设置项定义点击事件:

如果只是定义点击事件还好,如果还涉及设置项的显示和隐藏,那就恶心了,你的代码会出现会多setVisbility的代码,后续这样的代码维护起来也很麻烦。

如果设置项一多,在布局文件中一个个写Layout肯定不是办法。

看看微信的设置,这么多设置项,如果要我在布局文件中一个个写View,那工作量就大了。

所以基于上面的考虑,SettingPie由此而生。

简单使用

首先将其引入到项目中,SettingPie采用kotlin编写,java也可以使用。

dependencies {implementation 'io.github.jamgudev:settingpie:1.0.0'
}

如果你想在设置列表中添加一个标题

你可以这样设置:

SetListBuilder(recyclerView).addItem {SetItemBuilder().viewType(VIEW_TYPE_TEXT_TITLE).mainText("端游角色卡设置", 14, "#999999")}.build()

SettingPie是基于RecyclerView的,所以需要在构造方法中传入recyclerView实例,后续添加的设置项都会放入到该RecyclerView中。

在addItem内传入布局类型,以及属性配置,即可添加一个文本。

而如果你接下来希望有这样的设置项:

可以添加这样的代码:

SetListBuilder(binding.recycler).showDecoration(true)    // 默认不显示分割线,如果需要显示需置为true.addItem {SetItemBuilder().viewType(VIEW_TYPE_TEXT_TITLE).mainText("端游角色卡设置", 14, "#999999")}.addItem {SetItemBuilder().viewType(VIEW_TYPE_NORMAL).mainText("角色动作", textColor = "#999999").hintText("攻击").layoutProp(LayoutProp {Toast.makeText(this@MainActivity, "clicked", Toast.LENGTH_SHORT).show()}).hintIcon("https://q.qlogo.cn/qqapp/1104466820/2480FDF9E6072E6536CE5FF7B946674F/100").mainIcon("https://q.qlogo.cn/qqapp/1104466820/2480FDF9E6072E6536CE5FF7B946674F/100")}.addItem {SetItemBuilder().viewType(VIEW_TYPE_NORMAL).mainText("光效").hintText("九幽冥火").hintIcon("http://img.daimg.com/uploads/allimg/210729/3-210H92301020-L.jpg").mainIcon(R.drawable.ic_launcher_background)}.build()

其实也就是新增两项viewType为VIEW_TYPE_NORMAL的Item,通过在mainText()中设置文字的属性、颜色等,还可以通过layoutProp设置点击事件。

如果你想要第二栏的头像显示为圆形,可以在传入url值时,同时传入一个足够大的圆角,如下:

.hintIcon(url, 16)

hintIcon()有很多重载,你可以利用这些方法,对图片进行详细的设置,例如图片的大小、加载图片时的placeHolder,errorHolder等。

同时也支持加载本地的资源文件,传入资源ID即可

上面添加的设置项与之前的设置项都是紧挨着的,如果要设置页表现如下,应该怎么设置呢?

.addGroupItems {ArrayList<SetItemBuilder>().apply {add(SetItemBuilder().viewType(VIEW_TYPE_NORMAL).mainText("光效").hintText("九幽冥火").hintIcon("http://img.daimg.com/uploads/allimg/210729/3-210H92301020-L.jpg").mainIcon(R.drawable.default_img_placeholder))add(SetItemBuilder().viewType(VIEW_TYPE_CHECKBOX).mainText("展示外观").checkBoxProp(CheckBoxProp(true, 50) { _, isChecked ->Toast.makeText(this@MainActivity,"check box clicked = $isChecked",Toast.LENGTH_SHORT).show()}).layoutProp(LayoutProp {Toast.makeText(this@MainActivity, "clicked", Toast.LENGTH_SHORT).show()}))add(SetItemBuilder().viewType(VIEW_TYPE_NORMAL).mainText("光效").hintText("九幽冥火").mainIcon(R.drawable.default_img_placeholder))}
}

只需要接着add就可以了,只不过这次调用的addGroupItems(),以添加整组的方式,SettingPie会自动在组前,添加一道较宽的分隔线来间隔。

SettingPie还支持设置内边距、列表分割线等其他属性,更多的用法请访问SettingPie的主页:https://github.com/jamgudev/SettingCreatorHelper,如果觉得我写的还不错,欢迎start和fork支持。

兄dei,如果觉得我写的还不错,麻烦帮个忙呗

设置页布局神器!有了它,开发设置页简直是享受相关推荐

  1. 15-微信小程序商城 产品评价页布局(微信小程序商城开发、小程序毕业设计、小程序源代码)(黄菊华-微信小程序开发教程)

    产品评价页布局 本节主要讲解产品评价页的布局和实现,效果如图13-22所示. 1.布局分析 结构布局分析示意如图13-23所示. 根据上面的布局分析,我们会产生基础的框架,代码示例如下: <vi ...

  2. android button 中文字位置设置,iOS开发-- 设置UIButton的文字显示位置、字体的大小、字体的颜色...

    btn.frame = CGRectMake(x, y, width, height); [btn setTitle: @"search" forState: UIControlS ...

  3. html 打印指定区域并去掉页眉、页脚,设置打印布局(纵向、横向)

    <style type="text/css"> table{font-size:18px; border-collapse:collapse; text-align: ...

  4. DevExpress.XtraReports报表,动态设置报表布局

    本文描述的动态开发报表的方式已封装成DLL,现向外发布,需要请猛击这里. 引言 上回负责报表这块,说不能再像以前的项目一样的做报表了,以前项目300多张报表,一张一张的画,一张一张的写存储过程,工作量 ...

  5. 移动web基础:视口(viewport),流式布局 JDM京东移动端开发

    目标 能够理解视口的概念并进行视口的设置 能够说出流式布局的基本布局特征 能够使用 2倍图进行页面开发 能够实现 京东首页的 头部布局 移动web基础 移动端调试问题 模拟器调试 真机调试:使用手机进 ...

  6. 书籍折页是什么效果_Word的书籍折页是什么 如何设置Word的书籍折页

    书籍折页是Microsoft Word中用来创建菜单.请柬.事件程序或任何其他类型的使用单独居中折页的文档功能的选项.具体在"文件"-"页面设置"对话框中的&q ...

  7. vue.js 多页 php,如何使用 vue-cli 开发多页应用方法

    如何使用 vue-cli 开发多页应用?本文主要介绍了详解如何使用 vue-cli 开发多页应用,小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望能帮助到大家. 全局配置 修改 webpack ...

  8. css background 充满自适应_剖析一些经典的CSS布局问题,为前端开发+面试保驾护航...

    一.让一个元素水平垂直居中,到底有多少种方案? 水平居中 对于 行内元素: text-align: center; 对于确定宽度的块级元素: width和margin实现.margin: 0 auto ...

  9. bootstrap怎么强制不换行_【Word考点】页面设置:页边距、分隔符要怎么设置?如何分栏?...

    跟着步骤操作会让思路更清晰.两个真理:积少成多 | 实践是检验真理的唯一标准. 接下来的时间会将MS Office的知识点一个个来讲解,所以先从Word开始吧,这次主要说的内容都在[页面布局]选项卡中 ...

最新文章

  1. 优秀校园网站评比标准
  2. idea自动生成get set_CTO:不要在Java代码中写set/get方法了,逮一次罚款
  3. 程序员面对下列技术问题,如何做决策
  4. flv播放器以及调用代码
  5. win10如何关闭文件夹或者照片的最近浏览?
  6. 基于Linux的虚拟主机搭建
  7. O-RAN:致力于ICDT融合,打造开放与智能的无线接入网
  8. 51nod 1489 蜥蜴和地下室
  9. k8s nodeSelector和affinity
  10. Mahout学习笔记-分类算法之Decision Forest
  11. flask web开发是前端还是后端_后端开发该不该学前端开发?
  12. 比特率和波特率有什么区别吗?
  13. 对称密钥加密、非对称密钥加密、混合加密机制
  14. Opencv相机校准之棋盘格标定
  15. c语言字符串作业题,C语言课后习题练习(四)
  16. 8255并行接口与交通灯控制
  17. UIPATH 调用SAP BAPI
  18. 人民币对美元汇率中间价报6.7560元 上调349个基点
  19. C/C++程序员是什么让你有如此优势?音视频开发该怎么学?
  20. jmeter伪造ip进行压测(伪造大量ip,测试负载均衡)

热门文章

  1. AndroidStudio更改包名及更改包名后R文件丢失无法生成
  2. 如何将列的数字编号,转化为EXcel的字母表示的列编号
  3. Android解析Window机制
  4. MarkDown常用公式、符号、语法总结
  5. 基于JAVA共享充电宝管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
  6. IMAP、POP3、SMTP邮件服务器
  7. spring boot + maven + opencv 车牌识别系统,包含车牌检测、车牌号识别训练
  8. 【池化技术】池化技术基础和原理
  9. 怎样用一个DIV绘制熊猫头像
  10. webpack和vue热更新