本記事はJetpackComposeにイラついた中級プログラマーが思いをそのままにつづったものです。
具体的には
※知っている部分は飛ばしてください
※安定すれば意味ない記事です 2022/10/24
Android
をkotlin
でデザインする際にxml
ではなく宣言型UI
であるJetpackCompose
を用いてUIを描けるJetpackComposeをMaterial3
で入れたのだが、開発段階ということもあって、表で使える関数がかなりありません。(Material3の物は使えるのだが、内部で使われているクラスやインターフェースや関数がマジでinternal)
イラついたところ
※特に意味はない無駄情報
Material3の公式っぽいところがAndroidを紹介していますが、Component一覧から適当なコンポーネントを選んでAndroidの公式リファレンスに跳ぶのですが、なんと見本のコードの中で出されている関数がMaterial3だと存在しなかったり、そもそもMaterial3だとinternalだったりする。
みんなの心の叫びがこれ
PLEASE STOP MAKING ALL USEFUL APIS INTERNAL
PLEASE STOP MAKING ALL USEFUL APIS INTERNAL
PLEASE STOP MAKING ALL USEFUL APIS INTERNAL
公式の解答はこれ(超意訳)
これがイライラする経験であることは知っています。しかしMaterial3はまだまだ開発途上であり、現在多くの重大なバグがあるので、Material3の公開範囲を当面制限してます。
まだまだアルファ版です。現在APIの形状は柔軟なままであり、開発者のフィードバックを取り入れることが可能です。コピペして自力で改造してください。
意味のある情報(対処法)
ということで、おもむろにMaterial3の前のバージョンをimplementに突っ込みます。
implementation 'androidx.compose.material:material:1.2.1'
そして、Project Structure
のDependencies
からapp
を片っ端から最新の安定版にします。(ただの趣味)
※なおmaterial3は安定版なんてまだない模様(1.0.0-rc01が最新なので最新を入れた ※LCならリコリスだったのに)
一般に、M2 と M3 の両方を 1 つのアプリで長期間使用しないでください。 と書いてありますが、Material3が安定したら止めるのでヨシ!
これでModifier.swipable()
などが使えるようになります。やったね!
※OptIn(ExperimentalMaterialApi::class)
とか@OptIn(ExperimentalLayoutApi::class)
とか、@ExperimentalMaterial3Api
などを忘れないように。あと@Preview
と@Composable
も
※同関数名がかぶったりする影響でエラーが出るかもしれませんが、Alt+Enter
でもするか、名前空間でもつけて区別させてあげてください。