コンポーザブルのプレビューで UI をプレビューする

コンポーザブルは関数によって定義され、@Composable アノテーションが付けられます。

@Composable
fun SimpleComposable() {
    Text("Hello World")
}

「Hello」という単語を含む単純なテキスト要素
世界」

このコンポーザブルのプレビューを有効にするには、アノテーション付きの別のコンポーザブルを作成します。 @Composable@Preview を使用します。この新しいアノテーション付きコンポーザブルには、 最初に作成したコンポーザブル SimpleComposable は次のとおりです。

@Preview
@Composable
fun SimpleComposablePreview() {
    SimpleComposable()
}

@Preview アノテーションは、これが Android Studio に このファイルのデザインビューにコンポーザブルを表示する必要があります。ライブ ストリームは コンポーザブルのプレビューも 更新されます

Compose を使用したリアルタイム更新を示す GIF
プレビュー

コードに手動でパラメータを追加して、Android Studio の動作をカスタマイズできます。 @Preview をレンダリングする。@Preview アノテーションを同じ構成ファイルに追加することもできます。 複数回使用して、異なるプロパティを持つコンポーザブルをプレビューできます。

@Preview コンポーザブルを使用する主な利点の一つは、 Android Studio のエミュレータで実行してくださいメモリを大量に消費するアプリケーションの起動を 最終的なデザインの変更のためのエミュレータと、@Preview の機能を 簡単なコード変更のテストも簡単です

@Preview アノテーションを効果的に活用するには、 入力として受け取る状態とイベントに基づいて 出力です。

@Preview を定義する

Android Studio には、コンポーザブルのプレビューを拡張する機能がいくつか用意されています。コンテナ デザインの変更やプレビューの操作ができるほか、プレビューをエミュレータまたはデバイスに直接デプロイすることも可能です。

サイズ

デフォルトでは、@Preview のサイズはコンテンツをラップできるように自動的に選択されます。ディメンションを手動で設定するには、heightDp パラメータと widthDp パラメータを追加します。これら 値はすでに dp として解釈されているため、.dp を追加する必要はありません。 説明します。

@Preview(widthDp = 50, heightDp = 50)
@Composable
fun SquareComposablePreview() {
    Box(Modifier.background(Color.Yellow)) {
        Text("Hello World")
    }
}

「こんにちは」と書かれた黄色の正方形
世界」

ダイナミック カラーのプレビュー

動的広告を有効にする おすすめします。 wallpaper 属性を使用して壁紙を切り替え、UI が 異なるユーザーの壁紙を選択します。さまざまな壁紙テーマから選択します によって提供される Wallpaper クラスです。この機能には Compose 1.4.0 以降が必要です。

さまざまなデバイスで使用

Android Studio Flamingo では、Preview の device パラメータを編集できます。 アノテーションを使用して、さまざまなデバイスでのコンポーザブルの構成を定義します。

サンプルのコンポーザブル
関数

device パラメータに空の文字列(@Preview(device = ""))がある場合は、 Ctrl + Space を押して予測入力を呼び出す。次に 必要があります。

サンプルの編集
関数

予測入力から、リストから任意のデバイス オプションを選択できます。例: @Preview(device = "id:pixel_4")。または、カスタム デバイス名を入力して、 spec:width=px,height=px,dpi=int… を選択して個々の値を設定し、 あります。

仕様
リスト

適用するには、Enter を押すか、Esc を押してキャンセルしてください。

無効な値を設定すると、宣言に赤い下線が引かれて修正が行われることがあります。 利用可能(macOS の場合は Alt + Enter(⌥ +⏎))> ...に置換。 検査では、入力に最も近い修正が提示されます。

無効な例
値

言語 / 地域

さまざまなユーザー ロケールをテストするには、locale パラメータを追加します。

@Preview(locale = "fr-rFR")
@Composable
fun DifferentLocaleComposablePreview() {
    Text(text = stringResource(R.string.greeting))
}

「Bonjour」という単語を含む単純なテキスト要素フランス語の
フラグ

背景色の設定

デフォルトでは、コンポーザブルは透明な背景で表示されます。スペースを追加するには、 showBackground パラメータと backgroundColor パラメータを追加します。保存 backgroundColor は ARGB Long であり、Color ではないことに注意してください。 value:

@Preview(showBackground = true, backgroundColor = 0xFF00FF00)
@Composable
fun WithGreenBackground() {
    Text("Hello World")
}

「Hello」と表示された緑色の長方形
世界」

システム UI

プレビュー内にステータスバーとアクションバーを表示する必要がある場合は、次のように showSystemUi パラメータを追加します。

@Preview(showSystemUi = true)
@Composable
fun DecoratedComposablePreview() {
    Text("Hello World")
}

ステータスバーとアクションバーがあるアクティビティが表示されているプレビュー ウィンドウ。

UI モード

パラメータ uiMode には、次のいずれかの Configuration.UI_* を指定できます。 定数を使用して、プレビューの動作を適宜変更できます。たとえば、プレビューを夜間モードに設定して、テーマがどのように反応するかを確認できます。

Compose プレビューの UI

LocalInspectionMode

これは、LocalInspectionMode から読み取ることができます。 CompositionLocal 検査可能なコンポーネント)。構成がレンダリングされる場合 プレビューで、LocalInspectionMode.currenttrue と評価されます。この プレビューをカスタマイズできます。たとえば プレースホルダ画像が表示されます。

この方法では、制限事項も回避できます。対象 ネットワーク リクエストを呼び出す代わりにサンプルデータを表示する例を示します。

@Composable
fun GreetingScreen(name: String) {
    if (LocalInspectionMode.current) {
        // Show this text in a preview window:
        Text("Hello preview user!")
    } else {
        // Show this text in the app:
        Text("Hello $name!")
    }
}

@Preview を操作する

Android Studio には、定義した関数とやり取りする機能が備わっています。 プレビューします。このインタラクションにより、プレビューのどのようなランタイムの動作 プレビューを使って UI を操作しやすくなります

インタラクティブ モード

インタラクティブ モードでは、 スマートフォン、タブレットなど、プログラムを実行しているデバイスで受信されます。インタラクティブ モード サンドボックス環境で分離されている(つまり、他のプレビューから分離されている) 要素をクリックし、プレビューでユーザー入力を入力できます。簡単な を使用して、コンポーザブルのさまざまな状態、操作、アニメーションをテストできます。

ユーザーがプレビューの「インタラクティブ」ボタンをクリックしたとき
ボタン

Google Chat を操作するユーザーの動画
プレビュー

コード ナビゲーションとコンポーザブルの枠線

プレビューにカーソルを合わせると、中に含まれるコンポーザブルの枠線が表示されます。コンポーザブルの枠線をクリックすると、エディタビューがトリガーされ、そこからコンポーザブルの定義に移動できます。

ユーザーがプレビューにカーソルを合わせると、

コンポーザブル

プレビューを実行

特定の @Preview は、エミュレータまたは実機で実行できます。「 プレビューは新しい Activity と同じプロジェクト アプリ内にデプロイされるため、 同じコンテキストと権限を共有します。インフラストラクチャを すでに権限が付与されている場合は権限をリクエストするボイラープレート コードです。

プレビューを実行アイコン プレビューを実行
アイコン をクリックします。 (@Preview アノテーションの横、またはプレビューの上部)に表示され、Android Studio は、その @Preview を接続済みのデバイスまたはエミュレータにデプロイします。

ユーザーがプレビューの [プレビューを実行] をクリックする
ボタン

プレビューを
デバイス

@Preview のレンダリングをコピーする

レンダリングされたプレビューはすべて、右クリックして画像としてコピーできます。

ユーザーがプレビューをクリックして、
説明します。

同じ @Preview アノテーションの複数のプレビュー

次のコマンドを使用して、同じ @Preview コンポーザブルの複数のバージョンを表示できます。 コンポーザブルに渡されるさまざまな仕様、パラメータなどに応じて異なります。この 作成しなければならないボイラープレート コードを減らすことができます。

マルチプレビュー テンプレート

androidx.compose.ui:ui-tooling-preview 1.6.0-alpha01 以降ではマルチプレビューが導入されています API テンプレート: @PreviewScreenSizes@PreviewFontScales@PreviewLightDark、 そして @PreviewDynamicColors が付きます。これにより、単一のアノテーションで 一般的なシナリオで Compose UI をプレビューします。

テンプレートを使用してさまざまなフォントと画面サイズをプレビューする

カスタム マルチプレビュー アノテーションを作成する

マルチプレビューでは、それ自体に構成の異なる複数の @Preview アノテーションを含むアノテーション クラスを定義できます。このアノテーションを コンポーズ可能な関数は、さまざまなプレビューを 1 回だけです。たとえば、このアノテーションを使用して、コンポーザブルごとに定義を繰り返すことなく、複数のデバイス、フォントサイズ、テーマを同時にプレビューできます。

まず、独自のカスタム アノテーション クラスを作成します。

@Preview(
    name = "small font",
    group = "font scales",
    fontScale = 0.5f
)
@Preview(
    name = "large font",
    group = "font scales",
    fontScale = 1.5f
)
annotation class FontScalePreviews

プレビュー コンポーザブルには次のカスタム アノテーションを使用できます。

@FontScalePreviews
@Composable
fun HelloWorldPreview() {
    Text("Hello World")
}

Android Studio のデザインタブに、大小のコンポーザブルが表示されている
フォント

複数のマルチプレビュー アノテーションと通常のプレビュー アノテーションを組み合わせることができます 完全なプレビューセットを作成できますマルチプレビュー アノテーションの組み合わせ 異なる組み合わせがすべて表示されるわけではありません各マルチプレビュー アノテーションは個別に動作し、独自のバリアントのみをレンダリングします。

@Preview(
    name = "Spanish",
    group = "locale",
    locale = "es"
)
@FontScalePreviews
annotation class CombinedPreviews

@CombinedPreviews
@Composable
fun HelloWorldPreview2() {
    MaterialTheme { Surface { Text(stringResource(R.string.hello_world)) } }
}

コンポーザブルがすべての画面に表示されている Android Studio のデザインタブ
構成

マルチプレビューと通常プレビューの組み合わせにより、 大規模プロジェクトの多くのプロパティを包括的にテストできます。

@Preview と大規模なデータセット

多くの場合、コンポーザブルに大規模なデータセットを渡す必要がある プレビューします。これを行うには、次の手順でサンプルデータをコンポーズ可能なプレビュー関数に渡します。 @PreviewParameter を使用してパラメータを追加する アノテーション。

@Preview
@Composable
fun UserProfilePreview(
    @PreviewParameter(UserPreviewParameterProvider::class) user: User
) {
    UserProfile(user)
}

サンプルデータを提供するには、次を実装するクラスを作成します。 PreviewParameterProvider に変換し、 サンプルデータをシーケンスとして扱う場合です。

class UserPreviewParameterProvider : PreviewParameterProvider<User> {
    override val values = sequenceOf(
        User("Elise"),
        User("Frank"),
        User("Julia")
    )
}

これにより、シーケンスのデータ要素ごとに 1 つのプレビューがレンダリングされます。

エリーズ、フランク、ジュリアが写ったプレビュー
コンポーザブル

複数のプレビューに同じプロバイダ クラスを使用できます。必要に応じて プレビューの回数を制限するには、limit パラメータを設定します。

@Preview
@Composable
fun UserProfilePreview2(
    @PreviewParameter(UserPreviewParameterProvider::class, limit = 2) user: User
) {
    UserProfile(user)
}

制限事項とベスト プラクティス

Android Studio は、プレビュー領域でプレビュー コードを直接実行します。いいえ エミュレータまたは実機を実行する必要があります。これは、 Layoutlib という Android フレームワークの一部です。Layoutlib はカスタムです Android デバイスの外部で動作するように設計された Android フレームワークのバージョン。「 このライブラリの目的は、Android Studio でレイアウトのプレビューを提供することです。 デバイス上でのレンダリングと非常によく似ています。

プレビューの制限事項

Android Studio 内でのプレビューのレンダリング方法の性質上、 軽量で、Android フレームワーク全体でレンダリングする必要がありません。 ただし、次のような制限があります。

  • ネットワークにアクセスできない
  • ファイルにアクセスできない
  • 一部の Context API を使用できない可能性がある

プレビューと ViewModels

ViewModel を 作成します。プレビュー システムでは、 ViewModel に渡されるパラメータ(リポジトリ、ユースケース、マネージャー、 使用できます。また、ViewModel が依存関係インジェクション( (Hilt など)で、プレビュー システムでは依存関係全体をビルドできません。 グラフを使用して ViewModel を作成します。

ViewModel を使用してコンポーザブルをプレビューしようとすると、Android Studio に エラーが発生することがあります。

Android Studio の問題ペインに「ViewModel」をインスタンス化できない
メッセージ

ViewModel を使用するコンポーザブルをプレビューする場合は、 ViewModel のパラメータが次の引数として渡された別のコンポーザブル 作成します。これにより、Terraform を使用するコンポーザブルを ViewModel

@Composable
fun AuthorColumn(viewModel: AuthorViewModel = viewModel()) {
  AuthorColumn(
    name = viewModel.authorName,
    // ViewModel sends the network requests and makes posts available as a state
    posts = viewModel.posts
  )
}

@Preview
@Composable
fun AuthorScreenPreview(
  // You can use some sample data to preview your composable without the need to construct the ViewModel
  name: String = sampleAuthor.name,
  posts: List<Post> = samplePosts[sampleAuthor]
) {
  AuthorColumn(...) {
    name = NameLabel(name),
    posts = PostsList(posts)
  }
}

アノテーション クラス @Preview

Ctrl または⌘+クリックでAndroid の @Preview アノテーション カスタマイズするときに調整できるパラメータの一覧は、 プレビューします。

annotation class Preview(
    val name: String = "",
    val group: String = "",
    @IntRange(from = 1) val apiLevel: Int = -1,
    val widthDp: Int = -1,
    val heightDp: Int = -1,
    val locale: String = "",
    @FloatRange(from = 0.01) val fontScale: Float = 1f,
    val showSystemUi: Boolean = false,
    val showBackground: Boolean = false,
    val backgroundColor: Long = 0,
    @UiMode val uiMode: Int = 0,
    @Device val device: String = Devices.DEFAULT,
    @Wallpaper val wallpaper: Int = Wallpapers.NONE,
)

参考情報

Android Studio がどのように @Preview の使いやすさを高めているかについて詳しくは、 その他のツールのヒントについては、Compose のブログ Tooling