どうもこんばんわ。ニコ生でCLANNAD一挙見てます。
本編で流れてるBGMすきすき
前提
Kotlin Android Extensions
は使えない模様。ViewBinding
へ乗り換えて。
環境
なまえ | あたい |
---|
Android Studio | Android Studio Arctic Fox \ 2020.3.1 Canary 3 |
minSdkVersion | 21 |
遭遇した問題 2021/01/03 現在
- Android 5でリソースが見つからないエラーでクラッシュ
今までの方法でDrawableを取得してBitmapへ変換してComposeで扱えるBitmapへ変換すれば取れる。
既存アプリへ導入
割と頻繁にアップデートが入るので、こっちも見て
AGPのアップデート
必要かどうかはわかりませんが、たしかサンプルコードいじってるときもAGPのバージョンがなんとかみたいな感じでアップデートした記憶があるので更新しておきましょう。
家のWi-Fi遅くてつらい
多分右下にアップデートする?みたいな通知が出てると思うのでそこから
Kotlinのアップデート
app
フォルダじゃない方のbuild.gradle
を開いて、書き換えていきます。
ext.kotlin_version
を1.4.21
へ変えます。
classpath 'com.android.tools.build:gradle:7.0.0-alpha03'
はバージョンを上げるとそうなると思う。
app/build.gradle
app
フォルダの方のbuild.gradle
を開いて、必要なライブラリを書いていきます。
以下は一例です。
buildFeatures
とかkotlinOptions
、composeOptions
と
dependencies
に書き足す感じですかね
できたらSync
してBuild
します。
Jetpack Compose を試す
適当にクラスを作って書いていきます。
@Preview
をつけることで隣のプレビューに表示されるようになります。@Preview
を付けた関数には引数を設定してはいけません。
Activityに置く
setContentView()の代わりにsetContent { }
を置いてその中にさっき書いたVideoInfoCard()
を書きましょう
他にも@Preview
のついた関数のところで実機プレビューが使えますが、
私の環境ではうまく動かなかったのでActivity
に置いたほうがいいと思います。
Modifierについて
よく登場するModifier
、多分すべてのCompose
で共通するheight
とかwidth
とかpadding
とかを設定するときに使う。
xmlでレイアウト組んでたときも共通で使えた属性あったから多分そんなやつ
連結して設定していきます
レシピ集
Jetpack Composeが流行ると願って
手を動かそう
カウンターアプリを作る
var count by remember { mutableStateOf(0) }
を使うことでカウント値を保持できます。
var count = 0
は動きませんでした。
実行結果
Modifierにクリックするやつがあります。Ripple
(波みたいなやつ)もできます。
実行結果
アイコンを表示 + 押せるようにする
今まで、マテリアルアイコンを使う際はAsset Studio
からアイコンを持ってくると思うんですが、
なんと!Jetpack Compose
を使うことでコード一行でアイコンを用意できます。Outlined
以外も用意できます。
実行結果
動画説明文見え隠れするやつ
実行結果
リスト表示
RecyclerView
みたいに画面外は表示しないLazyColumn
ってのがありますのでこれを使っていきます
まずRecyclerViewのAdapterみたいに一つだけのやつを用意します。
そしたら一覧表示を作って完成
こんな感じになると思う。RecyclerView
より一覧表示がかんたんで嬉しい。
(Vue.jsのv-for
みたいで使いやすい)
Fragment に設置する
とりあえず一つにFragmentからJetpack Compose使ってみようかなって。そんな方に
今(2020/12/30現在)だけ?
Fragmentを作るにはFragmentのバージョンを上げる必要があります。あげないと、prepareCall
とか言う謎のメソッドを書かないといけなくなります(正体不明)
app
フォルダにあるbuild.gradle
を開いてdependencies
に書き足します
そしたらBlogListFragment.kt
を作成してコピペ
BlogCardList()
どこから出てきたんだって話ですが、MainActivity.kt
に書いてあるのをそのまま使いました。
本来はComposeのUI用クラスを用意すべきです。
あとBlogCardList()
関数?メソッド?はどこのクラスにも所属していない(class { } の中に書いてない)
トップレベル関数ってやつなので、どこでもかけます?。注意点ですが名前がかぶるとエラーになります。
後はActivityに置きましょう。今までのXMLな感じで
サンプルコードではxml使わず(R.layout.activity_main)、動的にFrameLayoutを置いてますが別にXMLでFrameLayout置いてid設定してもいいです。
ちなみにNavigation
は使ったことがないです。argument
渡すのが楽になるとかなんとか
真ん中に表示させたい
一番実用性がありそう
Row(横並び編)
注意点としてはverticalAlignment
とhorizontalArrangement
で指定している値のスペルが若干似てるってことですかね。
なまえ | あたい |
---|
verticalAlignment | Alignment.CenterVertically |
horizontalArrangement | Arrangement.Center |
Column(縦並び編)
Row
とは逆になります。
なまえ | あたい |
---|
verticalArrangement | Arrangement.Center |
horizontalAlignment | Alignment.CenterHorizontally |
以下サンプルコード
こんな感じ
遭遇したエラー
R.jar: プロセスはファイルにアクセスできません。別のプロセスが使用中です。
@Preview
から実行しようとすると失敗する。ので、ActivityとかFragment
に置いていつもどおり実行したほうがいい。てかプレビューより早くない?
どうしても@Preview
から実行したければ
Make Project
した後に実行させるとうまくいく?
Type 'TypeVariable(T)' has no method 'getValue(Nothing?, KProperty<*>)' and thus it cannot serve as a delegate
by remember { } じゃないもう一つの方法
上も下も同じことができるので、だめな場合は下の方を試してみてください。アクセスの際にvalue
を付ける必要がありますが
else
なんかコピペし直したら治った。一応使ってるimport
書いておきますね
Caused by: java.lang.ClassNotFoundException: Composable Method ~
@Preview
のついた関数を消してそのまま実行すると出る。切り替えてあげよう
java.lang.NoSuchMethodError: No static method ~
関数有るのに無いとか言ってくるやつ。
ツールバーのBuild
からClean Project
を実行した後に再度実行すると直るんじゃないかな
なんか真っ赤になった。Importしてもなんか別なのがImportされるんだけど?
Sync Project
したらなんかアップデートしませんか?(Android Gradle Pluginだと思われ)って聞かれたのでアプデしたらなんか治った。難しいね
ソースコード
Android Studio Arctic Fox | 2020.3.1 Canary 3
で動作確認済です。
とりあえずブログ一覧を表示させた状態の画面が開くようになってるはずです。
https://github.com/takusan23/BlogListCompose
終わりに
- CPUとかメモリとかのリソースくっっっそ持っていくなこいつ。メモリも16GBあるのに無くなりそう()
- あとプレビューまだ不十分感。なんかずれたりするし。
- Activityに置いて普通に実行したほうが(私は)はやかった
- アイコンがすでに用意されているのは嬉しい。取り込む作業がなくなった
- ただAndroid StudioのDrawable表示機能が便利だったのでちょっとつらい
あとmargin
ってないのかな。見つけられなかったんだけど