想必大家都对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与关联控件的哪边相关。