Android ConstraintLayout app:layout_constraintHorizontal_bias详解

想必大家都对Google新贵ConstrainLayout的使用爱不释手。今天在使用app:layout_constraintHorizontal_bias属性的时候遇到点小疑问,研究了一会儿才知晓bias值的意义:即bias值=子View左相关的长度/(子View左相关的长度+其右相关的长度),默认值为0.5。在此记录并分享以下两种示例:

假设子view的宽度是父布局的1/2,父布局的宽度视作 1 .

情景1:

如下代码,约束子View的左边与父布局的左边相关,约束子View的右边与父布局的右边相关,则此时左相关的长度为1/4、右相关的长度为1/4 。

现把bias从0.5改为0.8,由公式可以看出,bias值与左相关的长度是成正比的,增大bias值,由于子View的左边与父View的左边相关,则此时子View整体会往右偏移。容易计算:

左相关长度/右相关长度=0.8/0.2=4.

因此,容易计算出0.5-->0.8时,子View往右的偏移量为 :3/20;

左边的空白区域占屏幕的2/5,右边的空白区域占屏幕的1/10;

示意图如下:

 <TextView
        android:id="@+id/main_tv_print_get_res"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:text="Show get response here"
        android:background="@color/tv_res"
        app:layout_constraintDimensionRatio="h,157:98"
        app:layout_constraintWidth_percent="0.5"
        app:layout_constraintHorizontal_bias="0.8"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:textSize="20sp"
        android:layout_marginTop="10dp"
        android:gravity="center"
        />

 

情景2:

如下代码,约束子View的左边与父布局的右边相关,约束子View的右边与父布局的左边相关,则此时左相关的长度为3/4、右相关的长度为3/4 。

现把bias从0.5改为0.8,由公式可以看出,bias值与左相关的长度是成正比的,增大bias值,由于子View的左边与父View的右边相关,则此时子View整体会往左偏移。容易计算:

左相关长度/右相关长度=0.8/0.2=4.

因此,容易计算出0.5-->0.8时,子View往左的偏移量为 :9/20;

此时子View的左边已经偏离屏幕:|1/4-9/20|=1/5

示意图如下:

<TextView
        android:id="@+id/main_tv_print_get_res"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:text="Show get response here"
        android:background="@color/tv_res"
        app:layout_constraintDimensionRatio="h,157:98"
        app:layout_constraintWidth_percent="0.5"
        app:layout_constraintHorizontal_bias="0.8"
        app:layout_constraintLeft_toRightOf="parent"
        app:layout_constraintRight_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:textSize="20sp"
        android:layout_marginTop="10dp"
        android:gravity="center"
        />


总结:

1.bias值=子View左相关的长度/(子View左相关的长度+其右相关的长度)

2. 由公式可以看出,bias值与左相关的长度是成正比的,增大bias值,子View的左相关总是随之增长。至于控件具体往左往右移动,则视子View与关联控件的哪边相关。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值