AndroidStudio ConstraintLayout、ガイドライン、チェーン機能

##ConstraintLayoutとは
>そもそも,``Constraint``とは英語で``制約``という意味です。

ConstraintLayoutとは、その名の通り、レイアウト部品の１つです。
ConstraintLayout を使用すると、フラットなビュー階層を持つ大きくて複雑なレイアウトを作成できます（ビューグループのネストはありません）。
xmlファイルをコードではなく、視覚的に扱えるGUIで作っていくと効率よく作業ができます。
一方LinearLayoutは、ネストをして縦方向横方向の部品を並べていきます。

すべてのビューが兄弟ビューや親のレイアウトとの関係に従って配置される点で、これは RelativeLayout と似ていますが、RelativeLayout よりも柔軟性があります。

**ConstraintLayoutは、全ての部品を相対指定します。**

##制約(Constraint)の定義
ConstraintLayout 内でビューの位置を定義するには、ビューに対して最低 1 つの水平方向の制約と 1 つの垂直方向の制約を設定する必要があります。各制約は、別のビュー、親のレイアウト、非表示のガイドラインとの接続や位置揃えを表します。
つまり、それぞれの部品との位置関係を指定してあげます。
例えば、「上はこの部品から8dp,左はこの部品から8dp」のように。

XMLファイルで記述もできるが、デザイン画面で扱う方が効率がいい気がします。

##ConstraintLayoutにおけるlayout_width/height
デザイン画面で開発を進めていく場合、制約(Constraint)は、``Constraint Widget``で設定していきます。

Constraint Widgetの下図の3つのアイコンを切り替えることで、親部品いっぱいまで幅や高さを広げる事や、センタリングが可能となる。

※XMLファイルの場合、親ビューの上限サイズまで拡張する場合は、layout_width/height属性に0dpを指定する(=Match Constraints)。**
![https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_673880_cad5ea0f-c069-2eb0-3c08-87e869485027.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1098849/b711bc40-44e3-fa46-de38-43e203b90f6d.png)
``・固定: 下のテキスト ボックスに特定のサイズを指定するか、エディタ内でビューのサイズを変更します。``


![https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_673880_5e92ed82-6652-5889-fd31-e4d38a219ca2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1098849/4f2d2102-c2bf-bb11-c1e4-86e2ec39038c.png)
 ``・コンテンツをラップ: ビューはコンテンツを収めるのに必要なだけ拡大します。``

![https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_673880_28e75ca0-ff8f-2c6f-1868-4bd35a43cd7a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1098849/e8afcbdd-4b96-094a-0c2a-fe83e396e465.png)
``・制約に合致: ビューは各辺の制約を満たす範囲内で（ビューのマージンを考慮して）可能な限り大きく拡大します。ただし、この動作は以下の属性と値で変更できます（これらの属性は、ビューの幅を「制約に合致」に設定した場合のみ有効です）。``

##横並びの変更
デザイン画面でレイアウトを調整すれば縦画面から、横画面の変更も簡単に出来る。
![スクリーンショット 2021-06-14 14.45.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1098849/5ad52bed-96bb-a214-dbbf-26c6d1a87edf.png)
上図から、横画面に変更するには、``etName``と、``etMail``の制約ハンドルを変更できれば横に持って来れる。
![スクリーンショット 2021-06-14 14.45.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1098849/985bba97-8381-c51a-436b-715ae5072daf.png)

綺麗にベースラインを整えるには、``名前``を右クリック>``Show Baselene``>``etNameまでドラッグドロップ``
![スクリーンショット 2021-06-14 14.46.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1098849/066cb666-ad65-c1b1-f7fb-07ae0cc9701e.png)


##Tips ガイドライン
メニューバーから、``add Vertical Guideline``を選択すると、ガイドラインを使用できる。
ガイドラインは、制約の設定先に指定しておくと、ガイドラインに沿って変更内容が更新されるので、便利な機能。

ガイドラインを設定することにより簡単に綺麗に配置が可能となります。



####サンプルコード（ガイドライン）

```
    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_begin="115dp" />
```

##Tips チェイン機能

チェイン機能を使うと、複数の画面部品を横方向、または縦方向にグループ化出来る機能です。

**設定手順**
``チェインしたい部品を複数選択>右クリック>Chains>Create Horizontal Chain``

さらに、
チェインされた部品を右クリック>Chains>Horizontal Chain Style
を選択すると、
``[spread],[spread inside],[packed]``の3個から機能を選ぶ事ができる。

どの機能もチェインした部品を均等に並べることができるので、１つ１つ設定する手間が省けます。