一个相对布局容器,继承自ViewGroup,并支持百分比布局缩放,下面是关于Library的简单介绍,对于代码中的问题,欢迎大家反馈问题并提Issue,喜欢的朋友可以Star一下,您的Star是对开源作者最好的支持
implementation 'com.brook.android:DependencyLayout:1.1.4'
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
然后在需要使用的模块的build.gradle中添加以下代码
dependencies {
implementation 'com.github.Brook007:DependencyLayout:1.1.4'
}
在实例化DependencyLayout之前加入以下代码
DependencyLayoutConfig.getInstance()
// 设计图中的宽度
.setDesignWidth("750px")
// 设计图中高度
.setDesignHeight("1294px");
也可以在XML布局文件中配置
app:designHeight="1294px"
app:designWidth="750px"
当两个同时配置时,默认优先选择Xml中的配置,Demo中有一个简单的登录页面的实现,可以给大家一些参考activity_simple.xml
标准720P分辨率和1080P分辨率的对比
标准2K分辨率和目前最常见的全面屏分辨率(1080x2340)的对比
分辨率差距极大的480P分辨率和2K分辨率对比的对比
以及你现在找都找不到的QVGA分辨率和WVGA分辨率对比(也许有些手表是这个级别的分辨率吧)
这里附带了27款真机的运行效果图
属性 | 类型 | 描述 |
---|---|---|
designWidth | string | 设计图中的宽度 |
designHeight | string | 设计图中的高度 |
dependency_padding | string | DependencyLayout支持的的内边距 |
dependency_paddingLeft | string | DependencyLayout支持的的左边距 |
dependency_paddingTop | string | DependencyLayout支持的的上边距 |
dependency_paddingRight | string | DependencyLayout支持的的右边距 |
dependency_paddingBottom | string | DependencyLayout支持的的下边距 |
android:padding | dimension | 系统的属性的内边距 |
android:paddingLeft | dimension | 系统的属性的左边距 |
android:paddingTop | dimension | 系统的属性的上边距 |
android:paddingRight | dimension | 系统的属性的右边距 |
android:paddingBottom | dimension | 系统的属性的下边距 |
属性 | 类型 | 描述 |
---|---|---|
alignParentLeft | boolean | View上边对齐到父View的左边 |
alignParentTop | boolean | View上边对齐到父View的上边 |
alignParentRight | boolean | View上边对齐到父View的右边 |
alignParentBottom | boolean | View上边对齐到父View的下边 |
toParentCenterVerticalLeft | boolean | View右边对齐到父View垂直中线的左边 |
toParentCenterVerticalRight | boolean | View左边对齐到父View垂直中线的右边 |
alignParentCenterHorizontalTop | boolean | View下边对齐到父View水平中线的上边 |
alignParentCenterHorizontalBottom | boolean | View上边对齐到父View水平中线的下边 |
centerInParentHorizontal | boolean | View在DependencyLayout中水平居中 |
centerInParentVertical | boolean | View在DependencyLayout中垂直居中 |
centerInParent | boolean | View在DependencyLayout中水平和垂直居中 |
aboveTo | reference | View在引用的View上边 |
toRightOf | reference | View在引用的View右边 |
belowTo | reference | View在引用的View下边 |
toLeftOf | reference | View在引用的View左边 |
alignTop | reference | View上边与引用的View上边对齐 |
alignRight | reference | View右边与引用的View右边对齐 |
alignBottom | reference | View下边与引用的View下边对齐 |
alignLeft | reference | View左边与引用的View左边对齐 |
toCenterVerticalLeft | reference | View位于引用的View水平中线左边 |
toCenterVerticalRight | reference | View位于引用的View水平中线右边 |
alignCenterHorizontalTop | reference | View位于引用的View垂直中线上边 |
alignCenterHorizontalBottom | reference | View位于引用的View垂直中线下边 |
centerVerticalOf | reference | View的水平中线与引用的View的水平中线对齐 |
centerHorizontalOf | reference | View的垂直中线与引用的View的垂直中线对齐 |
centerOf | reference | View在引用的View的中间 |
dependency_marginLeft | string | View左边距与偏移 |
dependency_marginTop | string | View上边距与偏移 |
dependency_marginRight | string | View右边距与偏移 |
dependency_marginBottom | string | View下边距与偏移 |
dependency_padding | string | View的内边距 |
dependency_paddingLeft | string | View的左边距 |
dependency_paddingTop | string | View的上边距 |
dependency_paddingRight | string | View的右边距 |
dependency_paddingBottom | string | View的下边距 |
selfWidth | string | 自身的宽度 |
selfHeight | string | 自身的高度 |
android:layout_width | dimension | 使用系统设置的宽度 |
android:layout_height | dimension | 使用系统设置的高度 |
android:layout_marginLeft | dimension | 使用系统设置的左边距 |
android:layout_marginRight | dimension | 使用系统设置的右边距 |
android:layout_marginTop | dimension | 使用系统设置的上边距 |
android:layout_marginBottom | dimension | 使用系统设置的下边距 |
android:padding | dimension | 使用系统设置的内边距 |
android:paddingLeft | dimension | 使用系统设置的内左边距 |
android:paddingTop | dimension | 使用系统设置的内上边距 |
android:paddingRight | dimension | 使用系统设置的内右边距 |
android:paddingBottom | dimension | 使用系统设置的内下边距 |
对于使用,基本类似于RelativeLayout,但是比RelativeLayout多一些功能,不然的话也没必要写这个了 对于DependencyLayout上面的属性中,除了designWidth,和designHeight外,其他的类型是string的属性都支持以下几种写法
字母的含义
// 倒数第二位首字母
p->parent 父View
s->screen 屏幕
m->myself 自身
// 倒数第一位首字母
w->width 宽度
h->height 高度
格式 | 介绍 |
---|---|
xx%pw | 父View宽度的xx% |
xx%ph | 父View高度的xx% |
xx%sw | 屏幕宽度的xx% |
xx%sh | 屏幕高度的xx% |
xx%mw | 自身宽度的xx% |
xx%mh | 自身高度的xx% |
xxdp | |
xxpx | |
xx | 与设计图单位自动匹配 |
有时我们可能需要对一些第三方的View的属性进行适配我们需要实现ViewAdapter.java接口
默认提供了一个TextView字体大小适配的实现类TextViewImpl
实现了接口后,需要添加到注册到DependencyLayoutConfig类中,使用一下代码注册适配类
DependencyLayoutConfig.getInstance(this)
/*Other Initial*/
.addViewAdapterHandler(TextView.class, new TextViewImpl());
-
当设置DependencyLayout中的高度为wrap_content的时候,那么子View中不能设置xx%ph属性,否则会出错,同理,当设置DependencyLayout中的宽度为wrap_content的时候,那么子View中不能设置xx%pw属性
-
由于计算精度与类型转换为,计算出的实际大小可能会有1个像素的差别
-
属性间存在优先级问题,如当设置了dependency_paddingBottom时,android:paddingBottom属性就会失效,同理,当设置selfWidth的时候android:layout_width属性就会失效
-
关于演示图中的偏差,由于TextView字体问题,TextView的字体绘制可见下图
实际的情况可以看上面的效果预览图中最后一图中的最右边的开启了布局边界的部分,可以验证这个说法
添加TextView字体的支持- 代码优化与其他BUG修复
Email:brook999999@qq.com
- AutoLayout https://github.com/hongyangAndroid/AndroidAutoLayout
- ScaleLayout https://github.com/gavinliu/Android-ScaleLayout
- percent-support-lib https://github.com/JulienGenoud/android-percent-support-lib-sample
- AutoSize https://github.com/JessYanCoding/AndroidAutoSize
Copyright (c) 2016-present, Brook007 Contributors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.