2
0

More than 1 year has passed since last update.

JetpackComposeのmaterial3でswipeableなどのinternalな一部の関数の代替を使う方法

Last updated at Posted at 2022-10-24

本記事はJetpackComposeにイラついた中級プログラマーが思いをそのままにつづったものです。

具体的には

※知っている部分は飛ばしてください
※安定すれば意味ない記事です 2022/10/24

Androidkotlinでデザインする際に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に突っ込みます。

build.gradle(:app)
    implementation 'androidx.compose.material:material:1.2.1'

そして、Project StructureDependenciesからappを片っ端から最新の安定版にします。(ただの趣味)
※なおmaterial3は安定版なんてまだない模様(1.0.0-rc01が最新なので最新を入れた ※LCならリコリスだったのに)

一般に、M2 と M3 の両方を 1 つのアプリで長期間使用しないでください。 と書いてありますが、Material3が安定したら止めるのでヨシ!

これでModifier.swipable()などが使えるようになります。やったね!

OptIn(ExperimentalMaterialApi::class)とか@OptIn(ExperimentalLayoutApi::class)とか、@ExperimentalMaterial3Apiなどを忘れないように。あと@Preview@Composable

※同関数名がかぶったりする影響でエラーが出るかもしれませんが、Alt+Enterでもするか、名前空間でもつけて区別させてあげてください。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0