かわいい(曲もいい)
本題
JetpackComposeで折り返すレイアウトがほしいので作った。
完成品(ライブラリ)はこちら
ライブラリにしたのでこの記事読まなくていいよ
https://github.com/takusan23/ComposeOrigamiLayout
導入方法はREADME読んで(特に変わったことはしてない)
環境
最新の開発環境を使おう
なまえ | あたい |
---|
Android Studio | Android Studio Arctic Fox 2020.3.1 Canary 9 |
JetpackCompose | 1.0.0-beta01 |
JetpackCompose 導入
appフォルダ内のbuild.gradleを開いて
作成
適当なKotlinファイルを作成してComposeな関数を作っていきましょう
カスタムLayout
View
で言うところのViewGroup
ですね。
とりあえず引数をセットしてあげて、Layout()
を置きます。
これから返り値を書いてあげます
measurables と constraints
constraints
ってのは親の部品の大きさとかが取れるやつですね。
どういうことかというと、
これと これ って書いてある部分は同じ値になるということです。
一応200dpの値をpxにして出力しましたが同じ値になると思います。
- measurables
こいつは
content
引数に入れたUI部品の大きさを測定するときに使う。
最大値と最小値の情報を渡すと大きさが入ったデータを返してくれる。
これから置く部品の大きさを測定する
Measurable#measure()
は一度しか呼べません。(多分)
おけるかどうか(折り返すかどうか)
折り返すかどうかの計算をここで行います。とりまコピペ
データクラスにしても良かったけど3つだったのでTripleにX座標、Y座標、placeableをそれぞれ入れた
配置する
layout()
を呼んで、placeRelative()
を呼ぶことで部品が配置されます。
置いて使ってみる
あとはMainActivityなんかに置いて完成
説明すっとばちゃったけどこんな感じになります。
短い順にしてスペースを有効活用させる
並び替えしても問題ないならの話ですが
この小さい順に並び替えるやつ(ArrayList#sort{ }
)便利
使う方でtrue
してあげる。
これで短い順に上から入っていきます。
おわりに
ソースコードです。
参考にしました。ありがとうございます。
https://qiita.com/takahirom/items/c6625cbc7ebdda49de2f
https://developer.android.com/jetpack/compose/layout?hl=ja