hiro99ma blog

何か技術的なこと

android: Composableのレイアウト (4)

2024/10/07

Scaffold にするとレイアウトがうまくいかない

Surfaceで囲んでいたときはレイアウトができていたのだが Scaffold にするとうまくいかなくなった。

image

構造はこんな感じ。 ツリーで描いた方が上下のつながりがわかりやすいとは思うが、もういいや。

image

あれこれ試したのだが、どうもScaffoldの引数にModifier.fillMaxSize()を与えても効果がないようなのだ。

@Preview(showBackground = true)
@Composable
fun FullPreview() {
    ScaffoldSampleTheme {
        Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
            Box(contentAlignment = Alignment.TopCenter) {
                Text(text = "Guten", modifier = Modifier.background(Color.Blue).padding(innerPadding))
            }
            Box(contentAlignment = Alignment.Center) {
                Text(text = "Tag", modifier = Modifier.background(Color.Green).padding(innerPadding))
            }
        }
    }
}

image

例えば 1枚Surface(fillMaxSize())を挟むとうまくいく。
modifier=Modifier.background()での色つけはできないがcolor=で色が付けられた。

@Preview(showBackground = true)
@Composable
fun FullPreview2() {
    ScaffoldSampleTheme {
        Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
            Surface(modifier = Modifier.padding(innerPadding).fillMaxSize(), color = Color.Cyan) {
                Box(contentAlignment = Alignment.TopCenter) {
                    Text(text = "Guten", modifier = Modifier.background(Color.Blue).padding(innerPadding))
                }
                Box(contentAlignment = Alignment.Center) {
                    Text(text = "Tag", modifier = Modifier.background(Color.Green).padding(innerPadding))
                }
            }
        }
    }
}

image

Scaffoldにすればうまくいくかと思ったが、見た目はSurfaceと変わらなかった。
TopAppBarBottomAppBarも適当に付けてみたが、それでも同じだ。 下バーの部分だけ持ち上がっているから、下バーを表示するアプリだったらこれでもよいのか?
下バーがないときはないなりにスペースを入れてくれるというのを期待したのだが、そういうのではなさそう。

image

やっぱり空白は自力で入れるものなのかな?
まあ、他のサンプルとか見ていけばわかるだろう。

< Top page