追記:2021/07/15:1.0.0-rc02が出てます。
追記:2021/07/14:1.0.0-rc01が出てます。
正式リリースも近い。あとなんかAndroid Studioのプレビュー機能が4んでるみたいだから、ui-tooling
だけはBeta09
のままがいいらしい?
詳細:https://stackoverflow.com/questions/68224361/jetpack-compose-cant-preview-after-updating-to-1-0-0-rc01
composeOptions {
kotlinCompilerVersion '1.5.10'
kotlinCompilerExtensionVersion '1.0.0-rc01'
}
追記:2021/06/26:Beta09が出てます。
それと、現状?AndroidStudioのテンプレートからEmpty Compose Activityを選択してそのままの状態で実行すると起動しません。KotlinとJetpackComposeのバージョンを上げる必要があります。初見殺しだろこれ
java.lang.NoSuchMethodError: No static method copy-H99Ercs$default
build.gradle
(appフォルダではない方)
app/build.gradle
(appフォルダの方のbuild.gradle)
これで実行できると思います。
追記:2021/06/06:知らん間にJetpack Compose Beta08がリリースされました。Kotlinのバージョンを1.5.10にする必要があります。
composeOptions {
kotlinCompilerVersion '1.5.10'
kotlinCompilerExtensionVersion '1.0.0-beta08'
}
あと Compose版マテリアルデザインライブラリ
のリファレンスが親切になっていました。Google本気やん
https://developer.android.com/reference/kotlin/androidx/compose/material/package-summary#overview
【割と破壊的仕様変更】beta08
からSurface()
とCard()
のクリックイベントはModifier
経由ではなく、onClick
の引数を使うようになりました。
そしてSurface()
、Card()
でonClick
引数を使う際は、@ExperimentalMaterialApi
をComposeな関数に付ける必要があります。
追記:2021/05/22:Jetpack Composeがいつの間にかbeta07まで進んでました。
あとGoogle I/Oで言ってたけどホーム画面のウイジェットもJetpack Composeで書けるようになるとかなんとか
追記:2021/04/11:Beta04がリリースされました。多分Kotlinのバージョンを上げる必要があります。
composeOptions {
kotlinCompilerVersion '1.4.32'
kotlinCompilerExtensionVersion '1.0.0-beta04'
}
追記:2021/03/25:Beta03がリリースされました。AndroidView
の問題が修正されています。
ついでに、Android 7以前?で起きてたスクロール時にAndroidView
がずれる問題も直ってました。
追記:2021/03/13:Beta02がリリースされました。一緒にKotlinのバージョンを1.4.31
にする必要があります。
ComposeView
の問題が修正されました(多分)。
(なお今度はスクロール時にAndroidView()
がずれるようになった模様)
また、AppCompat
、Fragment
のライブラリのバージョンをそれぞれ1.3
以上にする必要があります。
追記 2021/03/02: Jetpack Compose Beta がリリースされました!。ついに(待望の)ベータ版になります
追記 2021/02/15:Jetpack Composeのバージョンがalpha 12
になりました。
影響があったといえば、
vectorResource
が非推奨。painterResource
を使うように。
- よって
Icon
へDrawableを渡すときの引数はimageVector
ではなく、painter
になります。
追記:Icon
の増えてるのでコピペじゃ動かなくなりました。
contentDescription
という文字列を入れる引数が増えてます。ので、コピペしたらIcon
の引数を足してください。以下のように
この続きです。そのうち追記しに来る
https://takusan.negitoro.dev/posts/android_jc/
Snackbar表示
Scaffold { }
で囲ってあげる必要があります。
Snackbar表示以外でもアプリバーとかドロワーの表示でも使うので置いておいて損はないはず。
また、Compose内で利用できるコルーチン(rememberCoroutineScope()
)を利用する必要があります。
実行結果
参考にしました:https://gist.github.com/gildor/82ec960cc0c5873453f024870495eab3
Context取得
リソース取得等は用意されてるけど、それ以外でContextを使いたい場合はこうです!
コルーチンは?
なんかコルーチン、2種類あるっぽい。
LaunchedEffect vs rememberCoroutineScope
なんか警告出てたので追記(2021/04/19)
LaunchedEffect
これは@Composable
がついた関数内でしか呼べません。
Button()
やText()
を置く感じで使うことになります。
また、key1
の中身が変わると、今のコルーチンはキャンセルされ、新しいコルーチンが起動するようになっています。
rememberCoroutineScope
じゃあrememberCoroutineScope
はなんだよって話ですが、これはComposable
な関数ではないところで使うのが正解らしいです。
(例えば、ボタンを押したときに呼ばれる関数はComposableな関数
ではない)
あってるか分からないので、詳しくは公式で
https://developer.android.com/jetpack/compose/lifecycle
テーマとか文字の色にカラーコードを使いたい!
Color.parseColor()
がそのままでは使えないので、androidx.compose.ui.graphics
の方のColor
の引数に入れてあげます。
ダークモード
まずはThemeColor.kt
みたいな色だけを書いておくクラスを作ってはりつけ
なんかisDarkMode
に@Composable
を付ける理由はわかりません。サンプルコードがそうなってたので便乗
@Composable
をつけるとLocalContext
等へアクセスできる。
つけない場合だと(今回の場合は)引数にContext
が必要になる。なるほどなあ
ここから例です
そしたらMaterialTheme { }
に渡してあげます。if文を一行で書く
ちゃんと動けばダークモードのときは真っ暗になると思います。AOD
ちなみに黒基調にするとIcon()
等が勝手に検知してアイコンの色を白色に変更してくれるそうです。ダークモード対応の手間が減る
タブレイアウト
見つけたので報告しますね。そんなに難しくない。
動作結果
動的にテーマを変える
MaterialTheme
のcolors
の部分を変えることでテーマを切り替えられるようになりました。これ従来のレイアウトじゃできないからComposeの強みじゃない?
まずは色の情報を置いておくクラスを作成して、以下をコピペします。
ThemeColor.kt
その後に書いていきます。ダークモードを一緒に書いた人はこっから掛けばいいです。
実行結果
ボタンを押すと色が切り替わると思います。
表示、非表示をアニメーションしてほしい
AnimatedVisibility
ってのがあります。
画像じゃわからんけど、ちゃんとアニメーションされてます。
右寄せ
android:gravity="right"
をJetpack Composeでもやりたいわけですね。重要な点はfillMaxWidth()
を使うところです
こうなるはず
均等に並べる
LinearLayout
と同じようにweight
を設定すればできます。
こうなるはず
余りのスペースを埋める
埋めたい部品に対してweight(1f)
を足してあげることで、他の部品の事を考えながら埋めたい部品で埋めてくれます。
こっちも親要素にfillMaxWidth()
を指定してあげる必要があります。(画面いっぱい使うなら)
こうなるはず
もっとサンプル書け!
Jetpack Compose
を書いてる人のサンプルには勝てないというわけでソースコード
の探し方でも。
1.Android Studioで使いたいUI部品のソースコードを開く
Button
とかOutlinedButton
とかMaterialTheme
の部分でCtrl 押しながら クリック
することで飛べます。
こんなのが出ると思う
2.ブラウザで
https://cs.android.com/
を開きます。
3.@sample の部分を探します。
さっきの画像だと、
のところですね
4.検索欄に入れる
で、何を検索欄に入れればいいんだって話ですが、さっき見つけた@sample ~
の部分、
最後から.
までの部分を入力します。
だと、OutlinedButtonSample
がそうです。
早速検索欄に入れましょう
5.コードを読み解く
検索欄に入れたらおそらく一番最初のサジェストが使い方の例になってると思います。
あとは読んでいくしか無いです。
サンプルアプリ
今までやったこと(だいたい)を一つのアプリにしてみました。どうぞ。
https://github.com/takusan23/JetpackComposeSampleApp
ダウンロード
https://github.com/takusan23/JetpackComposeSampleApp/releases/tag/1.0