既存のアプリには、View のテーマ設定やスタイル設定が非常に多い可能性があります。既存のアプリに Compose を導入する場合は、Compose 画面で MaterialTheme
を使用するようにテーマを移行する必要があります。つまり、アプリのテーマ設定には、View ベースのテーマと Compose テーマの 2 つの信頼できる情報源があります。スタイル設定の変更は、複数の場所で行う必要があります。
アプリを Compose に移行するには、既存のテーマの Compose バージョンを作成する必要があります。ただし、移行プロセスの早い段階で作成すると、XML テーマと Compose テーマの両方を維持する必要が生じ、メンテナンスの負担になります。
Material Theme Adapter
アプリで MDC-Android ライブラリの Theme.MaterialComponents.*
テーマを使用している場合、Material Theme Adapter ライブラリを使用すると、既存の View ベースの XML テーマにおけるマテリアル 2 の色、タイポグラフィ、シェイプのテーマ設定を、コンポーザブルで簡単に再利用できます。
MdcTheme
コンポーザブルを使用します。
import com.google.accompanist.themeadapter.material.MdcTheme class MdcThemeExample : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // Use MdcTheme instead of M2 MaterialTheme // Colors, typography, and shapes have been read from the // View-based theme used in this Activity setContent { MdcTheme { // Your app-level composable here } } } }
詳細については、Material Theme Adapter ライブラリのドキュメントをご覧ください。
Material 3 Theme Adapter
アプリで MDC-Android ライブラリの Theme.Material3.*
テーマを使用している場合、Material 3 Theme Adapter ライブラリを使用すると、既存の View ベースの XML テーマにおけるマテリアル 3 の色、タイポグラフィ、シェイプのテーマ設定を、コンポーザブルで簡単に再利用できます。
Mdc3Theme
コンポーザブルを使用します。
import com.google.accompanist.themeadapter.material3.Mdc3Theme class Mdc3ThemeExample : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // Use Mdc3Theme instead of M3 MaterialTheme // Color scheme, typography, and shapes have been read from the // View-based theme used in this Activity setContent { Mdc3Theme { // Your app-level composable here } } } }
詳細については、Material 3 Theme Adapter ライブラリのドキュメントをご覧ください。
AppCompat Theme Adapter
AppCompat Theme Adapter ライブラリを使用すると、Jetpack Compose でのテーマ設定に AppCompat XML テーマを簡単に再利用できます。コンテキストのテーマから色とタイポグラフィの値を使用して M2 MaterialTheme
を作成します。
AppCompatTheme
コンポーザブルを使用します。
import com.google.accompanist.themeadapter.appcompat.AppCompatTheme class AppCompatThemeExample : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { // Colors and typography have been read from the // View-based theme used in this Activity // Shapes are the default for M2 as this didn't exist in M1 AppCompatTheme { // Your app-level composable here } } } }
詳細については、AppCompat Compose Theme Adapter ライブラリのドキュメントをご覧ください。
カスタムテーマ属性
Core Theme Adapter ライブラリは、上記の Accompanist テーマアダプタ ライブラリすべてで使用され、さまざまな XML リソースを Compose に変換するための共通のロジックが含まれています。これらのリソース ユーティリティを使用して、カスタムテーマ属性を解析できます。
詳細については、Core Theme Adapter ライブラリのドキュメントをご覧ください。
デフォルトのコンポーネント スタイル
Accompanist テーマアダプタ ライブラリでは、テーマが定義されているデフォルトのウィジェット スタイルは読み込まれません。これは、Compose にはデフォルトのコンポーザブルのコンセプトがないためです。
詳細については、Compose でのカスタム デザイン システムをご覧ください。
テーマ オーバーレイ
View ベースの画面を Compose に移行する場合は、android:theme
属性の使い方に注意してください。Compose UI ツリーの該当部分に新しい MaterialTheme
が必要になる場合があります。