# 锁屏自适应布局框架DLock **Repository Path**: theme-dai-factory/dlock ## Basic Information - **Project Name**: 锁屏自适应布局框架DLock - **Description**: 我是Darry,主题戴工厂的厂长,大家也可以叫我戴厂长,「DLock」这个开源框架经过我们团队多年打磨,可以为锁屏开发者、设计师提供语义化的布局参数,并支持在单一手机上模拟仿真全分辨率、跨平台的效果。 - **Primary Language**: XML - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 18 - **Forks**: 2 - **Created**: 2023-01-31 - **Last Updated**: 2025-12-15 ## Categories & Tags **Categories**: android-modules **Tags**: None ## README # 锁屏自适应布局框架DLock ## 背景介绍


我本人啦,有梦就去追,与君共勉!~|
## 文档
觉得文档枯燥?可以直接看我的视频讲解,还有更多主题设计知识:
- 《锁屏自适应布局框架DLock》
- 《全生态手机主题通用设计稿》
- 《生动讲解点九图究竟是怎么回事》
- 《用AE实现二次元视频静转动の头发丝动效》
### 几点说明
1. **DLock框架** 由 **manifest.xml(初始化锁屏脚本文件)** 和 **bg_tool(组件资源文件夹)** 构成。
2. **manifest.xml(初始化锁屏脚本文件)** 已经集成了组件代码库,您只需在变量声明区、控件摆放区这两个位置书写代码,并绑定对应的布局参数即可。
3. DLock框架采用低耦合、低侵入性的架构逻辑,只需要绑定参数变量即可自适应布局,因此不仅支持新代码的构建,还可以较方便的移植到老代码中(后面有专门的小节讲到)。
4. 因为MIT协议,您的代码第2行需要保留这句注释:
```
```
5. 开启或者关闭测试框架,只需要将moni_status改为1或0:
```
```
### 响应式布局
响应式布局只解决一个问题,那就是:对于每一个 **元素** 或者是每一个 **组件** (由多个元素组成的元素集合,以下统称组件,后面会解释)来说,如果我们想把它放到锁屏上,它相对于锁屏的高度位置,是 _顶部对齐_ 的、 _居中对齐_ 的,还是 _底部对齐_ 的?
#### 锁屏坐标系
常规的锁屏坐标系的原点在屏幕左上角,越往下,y的坐标越大,越往右,x的坐标越大。
#### 「组件」相对于「锁屏坐标系」的位置
在我们开始写代码的时候,y坐标是直接写数值n,这其实就是相对于坐标系顶部的距离为n,代码及效果如下:
```
如果想写距离底部,就会用到#sh去减,代码及效果如下:
```
如果想写距离正中位置,就会用到#sh/2去加或者减,代码及效果如下:
```
#### 语义化变量
现在我们用语义化变量替换:
| 参数名 | 含义 |
|-----------|--------|
| **#top_base** | **顶部对齐基准** |
| **#bot_base** | **底部对齐基准** |
| **#mid_base** | **居中对齐基准** |
```
**使用语义化变量有几点好处:**
1. 不需要关注内部公式是如何计算的,只需要关注你的组件与屏幕的相对位置关系。
2. 语义化变量内部其实经过了一系列判断,无论是在真机实际屏幕大小,还是在模拟各分辨率大小的情况下,都能使绑定的组件处在正确定义的相对位置中。
#### 老代码移植
在了解了上述基础用法后,我们可以将需要模拟测试的老代码,整体复制粘贴到manifest.xml的中间,再使用现代化的代码编辑器(推荐VS Code或者Sublime Text),将组件折叠至只有一行,排除干扰,也是为了利于阅读。(请注意,为了能够被正确的收起,缩进关系一定要正确,如果不想手动缩进,可以使用xml格式化工具,自动完成正确缩进格式)
接下来,我们就可以对每一个组件进行语义化绑定,即这个组件如果y坐标原先是纯数字,那就改为#top_base+纯数字,如果原先为#sh-,那就改为#bot_base-,如果原先为#sh/2-,那就改为#mid_base-,改造完成后的代码如下:
请注意,在这里我们只改造最外层的「组件」,组件内部的各元素,它们的y坐标并不是相对于屏幕的位置,而是相对于该「组件」容器的位置,所以会与组件一起变动位置,无需关注;当然,这需要平时有良好的代码书写习惯,如果本身拆分的元素直接写在最外层,那所有在最外层的「元素」都要绑定语义化变量。
### 模拟分辨率
#### 真机看效果
在完成语义化变量的绑定后,无论你是哪家厂商的手机,正确的放入manifest.xml和bg_tool文件夹后,都可以在真机上应用,应用当前主题后,双击屏幕任意位置,将出现菜单选项,你就可以开始测试了,你可以选择三家厂商的不同分辨率,我们还提供了【恢复全屏】按钮,还提供了入口可以输出测试数据,默认会显示当前屏幕的宽高,以及模拟宽高:



#### oppo多分辨率文件夹计算器
众所周知,oppo支持多分辨率xml拆分放置,但是以一个约分后的数值命名每一个分辨率的文件夹,我们已经根据宽高比例,换算出了当前分辨率所对应的文件夹名称:
与此同时,oppo分辨率宽为1440的尺寸,其实在锁屏代码第3行,我们定义了screen width = 1080,所以在底层代码逻辑里,所谓的1440x3168,不过是1080x2376的等比撑大显示而已,所以在DLock模拟框架中,我们针对1440宽的几个分辨率,也都是以1080宽等比换算显示,在数据输出控制台中,你可以看到它们的实际宽高:
### 规定时间
绑定框架中的时间、电量参数,在真机测试中点击【规定时间】,就可以一键修改时间为厂商要求的时间,同时电量改为100%,方便生成各厂家的锁屏预览图:
#### 厂商规定
| 厂商 | 规定时间 |
|------|---------------------|
| 华为 | 08:08 |
| vivo | 10:00 2020年3月21日星期六 |
| oppo | 无限制,当前和vivo取齐 |
#### 相关参数
| 参数名 | 含义 |
|--------|----------------|
| #shiz | 时钟,已关联24/12小时制 |
| #fenz | 分钟 |
| #miaoz | 秒钟 |
| #dl | 电量 |
由于系统限制,分钟时间只能持续一分钟,如果系统时间发生改变,修改的参数也会改变,此时需要再次点击【固定时间】按钮。
请注意,该功能目前处于优化迭代中,后续将加入新的自适应布局配置,以规避顶部状态栏。
### 更多功能,敬请期待
todo:图形化锁屏开发工具
## License
[MIT](https://opensource.org/licenses/MIT)
Copyright (c) 2018-present, Darry Dai