hiro99ma blog

何か技術的なこと

android: やはりレイアウトは難しい

2024/10/15

もはや愚痴である。

いま、Android の Codelabs で ユニット2(アプリUIを作成する)のパスウェイ3(UIと状態を操作する)をやっている。
ようやく最後の項目だ。

こういうのがレイアウト的な目標である。

image

ようやくできてきたのがこちら。
領域がわかりやすいように変な色を付けているが、下の方は落ち着いてきた。
問題は上側だ。

image

    Column(
        horizontalAlignment = Alignment.CenterHorizontally,
        verticalArrangement = Arrangement.Center,
        modifier = modifier
            .padding(16.dp)
            .shadow(elevation = 4.dp, shape = RectangleShape)
            .width(400.dp)
            .height(500.dp)
    ) {
        Image(
            painter = painterResource(id = art.image),
            contentDescription = stringResource(id = art.title),
            modifier = Modifier
                .width(300.dp)
                .height(500.dp)
                .background(color = Color.DarkGray)
                .align(alignment = Alignment.CenterHorizontally)
                .wrapContentSize(),
            contentScale = ContentScale.Crop
        )
    }

うーん、難しく考えすぎたか?

    Column(
        horizontalAlignment = Alignment.CenterHorizontally,
        verticalArrangement = Arrangement.Center,
        modifier = modifier
            .padding(16.dp)
            .shadow(elevation = 4.dp, shape = RectangleShape)
            .width(400.dp)
            .height(500.dp)
    ) {
        Image(
            painter = painterResource(id = art.image),
            contentDescription = stringResource(id = art.title),
            modifier = Modifier
                .padding(24.dp)
                .background(color = Color.DarkGray)
                .align(alignment = Alignment.CenterHorizontally),
        )
    }

image

レイアウトの線があるとわかりにくいが、影はこんな感じ。
左上から照らしたようにしたかったがそういう指定はなさそう?

image

ダークモード

エミュレータで動かしてみると、それはそれでまだ足りないところがあった。
その中で一番大きいのはダークモードだった。

image

色を特別に指定したりしなければうまいことやってくれるのかと思ったけどそうじゃないのね。。。

もうこの程度でレイアウト関係は止めにしようと思ったのだが、ダークモードで文字が見えないというのはさすがにダメだ。
レイアウトの道は長いなあ。

Jetpack Compose のテーマ設定

マテリアルデザインの 2 や 3 で同じような Codelabs があるので注意だ。

おまけ

Modifier のページが重たい。
しかも、ソースコードから抜粋した順になっているためか名前がアルファベット順になっていない。

< Top page