Jetpack Composeのレイアウト関係メモ
Jetpack Composeを勉強していくなかで、「これ何だったっけ?」と何回も調べ直してることをメモしていく。随時更新。
Imageコンポーザブルのカスタマイズ
Customize an image | Jetpack Compose | Android Developers
contentScale
画像を表示したい枠に合うように、画像を切り抜いたり大きさを変更したりする。
contentScale | 画像の変化 |
---|---|
Fit | 画像が境界線と合うように拡大・縮小 |
Crop | 空いているスペースがなくなるように画像を切り抜き(アスペクト比そのまま) |
FillBounds | 空いているスペースがなくなるように画像を切り抜き(アスペクト比無視) |
clip
画像の形を決める。
例えばModifier.clip(CircleShape)で円形、Modifier.clip(RoundedCornerShape(16.dp)で角丸。
Image( painter = painterResource(id = R.drawable.sample), contentScale = ContentScale.Crop, modifier = Modifier.size(200.dp).clip(RoundedCornerShape(16.dp)) )
LazyColumn/Rowのアイテムの間隔
リストとグリッド | Jetpack Compose | Android Developers
Arrangement.spacedBy()
アイテム同士の間隔を空ける。
contentPadding
アイテム表示領域の上下左右に間隔を空ける。
(縦スクロールだったら、最初のアイテムの上、最後のアイテムの下、全てのアイテムの左右のpadding)
LazyColumn( contentPadding = PaddingValues(horizontal = 16.dp, vertical = 8.dp), verticalArrangement = Arrangement.spacedBy(4.dp), )
Scroll 修飾子
操作 | Jetpack Compose | Android Developers
コンテンツの境界が最大サイズ制約より大きい場合に、
ユーザーが要素をスクロールできるようにverticalScrollもしくはhorizontalScrollを設定する。
例えば端末を横向きにしたときColumnで配置したコンテンツが画面の表示領域に収まらない場合、スクロールできないと困る。
Column( modifier = Modifier.verticalScroll(rememberScrollState()) )
ScrollState により、スクロール位置を変更したり現在の状態を取得したりする。
AnimatedVisibility
アニメーション | Jetpack Compose | Android Developers
コンテンツの表示・非表示をアニメーションにする。
表示・非表示をbeelean型のStateか、MutableTransitionStateで保存する。
var editable by remember { mutableStateOf(true) } AnimatedVisibility(visible = editable) { Text(text = "Edit") }
val state = remember { MutableTransitionState(false).apply { targetState = true } } Column { AnimatedVisibility(visibleState = state) { Text(text = "Hello, world!") } Text(...) }