4
0

Kotlin / composeの同じようで同じじゃない話

Last updated at Posted at 2023-12-03

はじめに

自分がKotlinのcomposeを使ってAndroidアプリの開発をしているときにこれとこれって形が似ているけど何が違うんだろうと思い調べたことを書いていきます。

LazyRowやLazyColumnのcontentPaddingとModifier.paddingの違い

LazyColumnやLazyRowのパラメータにあるcontentPaddingで余白をつけるのと、Modifier.paddingで余白をつけるのとではどちらもその要素自身に余白をつけるということなので同じようなUIになるのでは??

いざ実践!!

contentPadding

LazyRow(
    contentPadding = PaddingValues(15.dp) //<-
) {
    items(10) {
        Text(
            text = "Item $it",
            modifier = Modifier.padding(5.dp)
        )
    }
}

Modifier.padding

LazyRow(
    modifier = Modifier.padding(15.dp) // <-
) {
    items(10) {
        Text(
            text = "Item $it",
            modifier = Modifier.padding(5.dp)
        )
    }
}

完成したもの

content.gif
上がcontentPadding
下がModifier.paddingで余白を指定

違いについて

上の動画を見ると、
contentPaddingで指定した場合はLazyRowの画面に見えていない部分も含めた全ての要素の上下左右に余白ができている。
Modifier.paddingはLazyRowの画面に見えている部分の要素の上下左右に余白ができている。

つまり下の図のようなイメージである。

スクリーンショット 2023-12-03 23.11.30.png

まとめ

contentPaddingを使うと、片方には余白があるがもう一方には余白がないという状態から始まるので、スクロール可能であることがわかりやすい。
Modifier.paddingを使うと、常に上下左右に余白をつけることができるが、スクロールする際、画面の端からではなく、画面の途中から要素がでてくるためちょっと気持ち悪い。また、要素がキリよく表示されていた時、スクロールできるのかが少し分かりづらい。他の要素や、場面に応じて使いわけよう!!

4
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
4
0