はじめに
- 最近、新規プロジェクト作成時に、Android Studioで生成される雛形コードが
Scaffold()
になっていることが多くないですか? - Codelabsのコースでは
Surface()
を使用していることが多いため違いが気になっていました - そこで
Surface()
とScaffold()
のどちらを使えばいいのか調べました
結論
-
Scaffold()
を使うべし - 理由はGoogleが
Edge-to-edge
を推奨しているため
Edge-to-edgeとは
公式ドキュメントによると、Edge-to-edgeを有効にするとステータスバーとナビゲーションバーの背後にコンテンツが配置されるようになる
これによりスクリーンの端から端までアプリが描画され、今まで以上に没入感のあるユーザー体験が可能となる
Scaffold
- Edge-to-edge対応に伴って必要な、上下のシステムバー・カメラノッチ周りの余白を自動調整してくれる
実装例はこちら↓
Surface
- これらの処理を手動で実装する必要がある
- WindowInsetsの管理が必要
まとめ
- 最新のAndroidバージョンとMaterial Designガイドラインに準拠しているのであれば、Scaffoldを使っていれば間違い無いかなと思います
- 僕はCodeLabのハンズオンをやる時は適宜、Surface → Scaffoldと読み替えています(ちょっとめんどうですが)
併せて読んでおきたい記事
- Surface や Scaffold を使わない場合どうなるのかがわかる
- Surfaceの役割がわかる
参考