有很多blog已经写的很详细了:
贴上他们的地址:
Android ConstraintLayout百分比布局-适配终结者(基本适配所有机型)
所有基本的详情看上面的应该了解的差不多了,这里说的是:
app:layout_constraintVertical_bias="1"
app:layout_constraintHeight_percent="1"
他们之间的关系,我没有看过源码,只是测试出来的结果,如果有什么问题请评论;
先看button布局
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintHorizontal_bias="0.3"
app:layout_constraintVertical_bias="0.3"
app:layout_constraintHeight_percent="0.7"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
贴上图:
app:layout_constraintHeight_percent="0.7"这里设置了0.7却没有用,因为我的android:layout_height="wrap_content"设置是wrap_content所有没有产生作用,继续
<Button
android:layout_width="wrap_content"
android:layout_height="0dp"
app:layout_constraintHorizontal_bias="0.3"
app:layout_constraintVertical_bias="0.3"
app:layout_constraintHeight_percent="0.7"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
这里就起作用了。
不知道细心的有发现,上面设置了
app:layout_constraintHorizontal_bias="0.3"
app:layout_constraintVertical_bias="0.3"
当把
app:layout_constraintHeight_percent="0.7" android:layout_height="0dp"
之后没有在垂直率的位置,而是往上去了。那么继续app:layout_constraintHeight_percent="0.7"这个意思是根据父类的比例,这里设置的是0.7,意思就是占比7份。假如我把app:layout_constraintVertical_bias="0.3"这个设置成1,水平的不管,水平只和
android:layout_width="wrap_content"有关系
<Button
android:layout_width="wrap_content"
android:layout_height="0dp"
app:layout_constraintHorizontal_bias="0.3"
app:layout_constraintVertical_bias="1"
app:layout_constraintHeight_percent="0.7"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
不知道有没有看出什么结果没有,我的垂直率设置成1,button往下了,目测高度在7份左右,有可能不相信,那么再设置app:layout_constraintHeight_percent="0.5" 这里值是0.5了看看
<Button
android:layout_width="wrap_content"
android:layout_height="0dp"
app:layout_constraintHorizontal_bias="0.3"
app:layout_constraintVertical_bias="1"
app:layout_constraintHeight_percent="0.5"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
button的高度居然只占一半了。
那么就说明一个问题,app:layout_constraintVertical_bias="1" app:layout_constraintHeight_percent="0.5"成对比关系了,如果垂直率设置成1的话,和父类高占比是成比例关系的,如果设置的是0.7,那么就是button的top 的高度和父类top的高度成7:3的关系 ,如果设置的是0.5,那么就是button的top 的高度和父类top的高度成5:5的关系 .
如果app:layout_constraintVertical_bias="0.3"这里不再是1,那么继续走起
<Button
android:layout_width="wrap_content"
android:layout_height="0dp"
app:layout_constraintHorizontal_bias="0.3"
app:layout_constraintVertical_bias="0.5"
app:layout_constraintHeight_percent="0.5"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
和我预想的差不多,button根据父类设置的的高低是永不变的,一直都占5份,但高度缩上去了,仔细定睛一看,感觉缩短了app:layout_constraintVertical_bias="1"这个值的一半呢?好像是的,那么再试一试呢。
<Button
android:layout_width="wrap_content"
android:layout_height="0dp"
app:layout_constraintHorizontal_bias="0.3"
app:layout_constraintVertical_bias="0.1"
app:layout_constraintHeight_percent="0.5"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
感觉有那么一回事了,然后我设置不同的值,差不多的,虽然没有看过源码的实现,应该差距不大。
总结:
如果设置了
app:layout_constraintVertical_bias="0.1"
app:layout_constraintHeight_percent="0.5"
了这两个值,父类不为1的话,这两个成对比关系,如果bias = 1的话,就是5:5的关系,如果不为1的话就是1-percent的值的等比分量来算:比如上面这个,就是1-0.5 剩下5份,再5份里面分成10份,0.1占一份。ok到这里已经差不多了,写的不那么通俗易懂,自己测试一下有助于记忆。