[Google I/O 2016] ConstraintLayout ~ Android の新 Layout

こんにちは @kgmyshin です。

Google IO 2016 基調講演でも取り上げられましたが、Androidの新しいLayoutであるConstraintLayoutが発表されました。今回はその概要を説明するセッションをレポートします。

新しいViewGroupであるConstraintLayout

DSC03498

まずは問題提起から。Androidのレイアウトを組む場合、考えるべきファクターから組み合わせを算出すると5300通りの画面が存在します。

DSC03500

この問題に対し、一般的にAndroidエンジニアは単純なものにはLinearLayout、複雑なものにはRelativeLayoutを用いてレイアウトを組んでいます。

DSC03501

しかし単純なLayoutを使うとネストによるパフォーマンスの問題に悩まされ、複雑なレイアウトを組む場合はそもそも使うことが難しいうえに維持も大変です。

DSC03502

そこでConstraintLayoutです。

DSC03504

ConstraintLayoutは小規模かつバンドルされていないライブラリです。API Level 9から使用することができます。ネストを減らすことができ、Android Studio1)2.2 previewから上で使うことができます。

DSC03506

なぜRelativeLayoutではだめなのか?ConstraintLayoutはRelativeLayoutの上位互換です。より表現しやすく、ネストを減らすことができ、専用のツールで組むことができます。

他の View へ結合
他の View へ結合
中央寄せ
中央寄せ
どちらに何%寄せるかということも設定できます
どちらに何%寄せるかということも設定できます
幅を最大にすることも出来ます
幅を最大にすることも出来ます

DSC03517

『多くのattributeが追加され困らないか?』という心配があるかもしれません。しかし実際に重要なのは、例えば上記の場合ですとConstarintを示している二つだけです。

DSC03518

UI Builderについて。xmlとUIのあるツールで編集できます。即時にfeedbackが返ってくる上、簡単に使えるパフワフルなツールです。

DSC03520

デモでは複数のViewを選択し、選択したものだけを左寄せや中央寄せ、右寄せにしたりといったUI Builderの機能の説明がありました。最後にNext stepとしてガイドラインを作成したりパフォーマンスを改善していく旨を述べてセッションは終了となりました。

まとめ

Androidアプリ開発の大部分を占めるのはレイアウトを組むことにありますが、そこにはある程度の経験とスキルが求められます。ここを疎かにすると途端にパフォーマンスに悪影響が出たり、最悪の場合はクラッシュすることもあります。

これが今回のConstraintLayoutの登場によって誰にでも手軽にレイアウトが組めるようになるのはもちろん、同時にパフォーマンスも高いものが期待できるのではないかと感じました。実際にCodelabで使ってみましたが、所々バギーなうえに、生成されるxmlの記述がソートされておらず可読性が悪いなどとまだまだ課題はありそうです。しかしネストが改善されるだけでも大きなメリットなので、今後に期待したいと思います。

脚注

脚注
1 2.2 previewから