1. ホーム

Android ConstraintLayout app:layout_constraintHorizontal_bias について解説します。

2022-02-17 19:39:42

皆さんは、Googleの新しい追加機能であるConstrainLayoutを使うことを楽しみにしていると思います。今日、app:layout_constraintHorizontal_biasプロパティを使うときに、ちょっと疑問に思ったことがあり、しばらく勉強して、バイアス値の意味がわかりました:つまり、バイアス値=左関連subViewの長さ/(左関連subViewの長さ+右関連subViewの長さ)、デフォルト値は0.5ということでした。ここでは、以下の2つの例を記録し、共有します。

子ビューの幅が親レイアウトの1/2、親レイアウトが1として扱われると仮定すると .

シナリオ1.

次のコード、制約付き 子Viewの左側は、親レイアウトの左側と関連している を制約するものです。 子Viewの右側が親レイアウトの右側と関連していること。 とすると、この時点で左相関の長さは1/4、右相関の長さは1/4となります。

ここで、バイアスを0.5から0.8に変更します。式から、バイアス値は左相関の長さに比例し、バイアス値を大きくすることで、子Viewの左側は親Viewの左側と相関があるため、この時、子View全体が右側に移動することがわかります。簡単に計算できます。

左相関長/右相関長=0.8/0.2=4。

したがって、0.5 - >0.8におけるsubViewの右へのオフセットは : 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となります。

ここで、バイアスを0.5から0.8に変更します。式から、バイアス値は左相関の長さに比例することがわかり、バイアス値を大きくすることで、子Viewの左側と親Viewの右側が関係するため、このとき子View全体が左側に移動することがわかると思います。簡単に計算できます。

左相関長/右相関長=0.8/0.2=4.

したがって、0.5 - >0.8 の場合の subView の左へのオフセットは、. と簡単に計算できます。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. バイアス値 = 子Viewの左相関の長さ / (子Viewの左相関+右相関の長さ)

2. 式からわかるように、バイアス値は左相関の長さに比例し、バイアス値を増加させると必ず子Viewの左相関が増加します。具体的なコントロールの左から右への動きについては、子ビューが関連するコントロールのどちら側に関連するかによって異なります。