
JetPackComposeでAndroidビューを作成する優れた方法
所要時間:1 分
歴史について
ユーザーは、通常複数のViewで構成される様々な画面を介してモバイルアプリケーションとインタラクションします。開発者がこのようなユーザーとのインタラクションに対処する方法は、Androidプラットフォームの存続期間中に、複数のパターンを使用することで大きく変化しました。初期の頃、開発者はModel-View-Controllerパターンを使用しており、次にModel-View-Presenterパターン(またはModel-View-Intent)を使用していました。最後に、Googleが推奨するModel-View-ViewModelパターンに移行した。ビューマネージャー」は進化したが(Controller/Presenter/ViewModel)、「ビュー」の部分自体はそれほど変わっていない。最も大きな変化は、初期の頃のようにアクティビティではなく、フラグメントをUIのビルディングブロックとして使うようになったことだ。
この間、私たちは主にXMLを使ってアプリケーション・ビューのレイアウトを定義していました。もちろん、コードだけでビューを定義することもできますが、この方法には欠点があります。通常、アプリケーションにはコードで定義された複雑で動的なビューは少ないかもしれませんが、現在でもほとんどのアプリケーションのレイアウトはXMLファイルで定義されています。
そんな中、Kotin言語が登場し、カスタムKotln DSLを使ってビューを定義できるというクールな機能が追加された。この機能は興味深いコンセプトだったが、Android開発者コミュニティから十分な注目を集めることはなかった。問題はあったが、最大の問題は高度なユースケースをサポートしていないことと、Android Studioからの公式サポートがないことだった。
なぜJetPack Composeなのか
少し前、グーグルはアンドロイド・アプリケーションの開発方法を統一することを決定した。その一環として JetPackスイートの一部として、GoogleはAndroidアプリケーション作成の多くの側面を統一した。ナビゲーションから、データベースへのアクセス、バックグラウンドジョブなどなど。さらにGoogleは、開発者がベストプラクティスに従い、定型的なコードを削減できるよう、強固な基盤を提供した。このファミリーの一部として JetPack Compose- は、UIを扱う新しい方法だ。JetPack Composeは、KotlinとカスタムDSL言語を利用して、画面レイアウトの設定、テーマの定義、ビュー状態の管理、UIアニメーションの追加を行います。これらはすべて、ReactNative、Flutter、iOSアプリですでに広く普及している宣言的アプローチによって実現される。
JetPack Composeの実践
JetPack Composeの使い方と、このツールキットで何ができるかを簡単に説明します。まず、Android Studio Arctic Fox 2020.3.1(またはそれ以降)を使用する必要があります。次に、新しいAndroidプロジェクトを作成します(Select a Project Templateウィンドウで、Empty Compose Activityを選択し、Nextをクリックします)。
詳しい説明は こちら.
開く MainActivityアクティビティは コンポーネント・アクティビティ:
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// … view
}
}ビューの定義に XML ファイルを使用する代わりに、JetPack Compose DSL の主要な構成要素である setContentラムダ(Kotlinで定義されたカスタムメソッド)でビューを定義します:
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
// … view
}
}
}XMLタグを使用してビューを定義する代わりに、JetPack Composeが提供するカスタムレイアウトとビューを使用します:
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Column {
Text("Alfred Sisley")
Text("3 minutes ago")
}
}
}
@Preview
@Composable
fun SampleView() {
}
}上記のコードでは、「2つの行」を持つ1つのカラムが作成されます(各行には、テキストを含む1つのビューが含まれます)。

プレビューを生成する方法については、しばらくしてから学ぶことにしよう。
各コンポーネントは、より複雑なビューを簡単に作成できるように、ビュー階層を定義することができます。私たちのビューコードは、Composable アノテーションでアノテーションされたメソッドを作成することで、Comosable "コンポーネント" に抽出することができます:
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
SampleView()
}
}
@Composable
fun SampleView () {
Column {
Text("Apple Juice")
Text("100 ml")
}
}
}これらのメソッドは アノテーションアノテーションでアノテーションされた)これらのメソッドは、Applications UIの基本的なビルディング・ブロックを提供します。Android Studioでプレビューを見るには、メソッドにPreviewアノテーションを付けてアプリをビルドします:
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
SampleView()
}
}
@Preview
@Composable
fun SampleView () {
Column {
Text("Apple Juice")
Text("100 ml")
}
}
}
個々の項目のプロパティに変更を加えることもできます。テキストの各行の背景色を変更してみましょう:
@Preview
@Composable
fun SampleView() {
Column {
Box(
Modifier.background(Color.Green)
) {
Text("Apple Juice")
}
Box(
Modifier.background(Color.Blue)
) {
Text("100 ml")
}
}
}
また、これらのビューにパラメーターを追加して、ジュースの名前やボリュームをダイナミックにすることもできる:
@Composable
fun SampleView(name: String, volume: Int) {
Column {
Box(
Modifier.background(Color.Green)
) {
Text(name)
}
Box(
Modifier.background(Color.Blue)
) {
Text("$volume ml")
}
}
}残念ながら、パラメータ化されたビューはプレビューできないので、別のビューを作成してプレビューを有効にする必要があります。そこで SampleViewPreviewはプレビューアノテーションを持ち、以前に定義された SampleView:
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
SampleViewPreview()
}
}
@Preview
@Composable
fun SampleViewPreview() {
SampleView("Orange Juice", 50)
}
@Composable
fun SampleView(name: String, volume: Int) {
Column {
Box(
Modifier.background(Color.Green)
) {
Text(name)
}
Box(
Modifier.background(Color.Blue)
) {
Text("$volume ml")
}
}
}
}JetPack Composeはすべてコンポジションなので、SampleViewの複数のインスタンスを簡単に使用することができます:
@Preview
@Composable
fun SampleViewPreview() {
Column {
SampleView("Orange Juice", 50)
SampleView("Mango Juice", 100)
}
}
概要
JetPack Composeは使いやすく、大きな可能性を秘めています。モダンで、インタラクティブで、ダイナミックなUIを構築できる。アプリのデスクトップUIを構築するのにも使える(まだアルファ版だが)。唯一の欠点は、JetPack Composeがまだ安定していない(2021年6月現在)ことだが、これはすぐに変わり、Android UIの新しい標準になる可能性が高い。JetPack Composeを学ぶには、ちょっとしたマインドシフトが必要だが、UIがますますダイナミックになる中、このステートドライブアプローチは、すべての開発者の生活を楽にするだろう。
リンク