LoginSignup
0
0

Jetpack Compose における Modifier について

Posted at

Jetpack Compose における Modifier は、Composable 要素の見た目や動作を修飾・構成するための非常に重要なコンセプトです。Modifier を使用することで、レイアウトのパラメータを設定したり、背景を描画したり、ユーザーのインタラクションを処理したりすることができます。以下では、Jetpack Compose でよく使われる Modifier とその使い方について詳しく説明します。

よく使われる Modifier

  1. レイアウト関連の Modifier

    • padding:内側の余白を設定します。
    • size:幅と高さを設定します。
    • fillMaxSize:利用可能なスペースを全て埋めるようにします。
    • wrapContentSize:内容のサイズに基づいて自身のサイズを調整します。
  2. 描画関連の Modifier

    • background:背景色や背景画像を設定します。
    • border:境界線を設定します。
    • clip:内容を切り取ります。
  3. インタラクション関連の Modifier

    • clickable:要素をクリック可能にします。
    • draggable:要素をドラッグ可能にします。
    • scrollable:要素をスクロール可能にします。
  4. 配置関連の Modifier

    • align:親レイアウト内での配置を設定します。
    • offset:位置をオフセットします。
    • zIndex:要素の層の順序を設定します。

使用例と方法

基本的な使用法

import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp

@Composable
fun ModifierExample() {
    Box(
        modifier = Modifier
            .size(100.dp)
            .padding(16.dp)
            .background(Color.Blue)
            .clickable { /* クリック処理 */ }
    )
}

Modifier のチェーン呼び出し

@Composable
fun ChainModifierExample() {
    Box(
        modifier = Modifier
            .size(200.dp)
            .padding(16.dp)
            .background(Color.Green)
            .border(2.dp, Color.Black)
            .padding(8.dp)
    )
}

align と offset の使用

@Composable
fun AlignAndOffsetExample() {
    Box(
        modifier = Modifier
            .fillMaxSize()
            .background(Color.LightGray),
        contentAlignment = Alignment.Center
    ) {
        Box(
            modifier = Modifier
                .size(100.dp)
                .background(Color.Red)
                .align(Alignment.BottomEnd)
                .offset(x = (-16).dp, y = (-16).dp)
        )
    }
}

クリック可能およびドラッグ可能

import androidx.compose.foundation.gestures.detectDragGestures
import androidx.compose.ui.input.pointer.pointerInput

@Composable
fun DraggableExample() {
    Box(
        modifier = Modifier
            .size(100.dp)
            .background(Color.Blue)
            .pointerInput(Unit) {
                detectDragGestures { change, dragAmount ->
                    // ドラッグ処理
                }
            }
    )
}

zIndex を使用して層の順序を調整

@Composable
fun ZIndexExample() {
    Box(
        modifier = Modifier
            .fillMaxSize()
            .background(Color.Gray)
    ) {
        Box(
            modifier = Modifier
                .size(100.dp)
                .background(Color.Red)
                .zIndex(1f)
        )

        Box(
            modifier = Modifier
                .size(50.dp)
                .background(Color.Blue)
                .zIndex(2f)
        )
    }
}

カスタム Modifier の作成

既存の Modifier ではニーズを満たせない場合、自分でカスタム Modifier を作成することも可能です。

import androidx.compose.ui.draw.drawBehind
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.drawscope.DrawScope
import androidx.compose.ui.unit.dp

fun Modifier.customBorder(color: Color, width: Float) = this.then(
    Modifier.drawBehind {
        drawRect(color = color, size = this.size, style = androidx.compose.ui.graphics.drawscope.Stroke(width))
    }
)

@Composable
fun CustomModifierExample() {
    Box(
        modifier = Modifier
            .size(100.dp)
            .customBorder(Color.Magenta, 4.dp.toPx())
    )
}

まとめ

Modifier は Jetpack Compose で非常に強力かつ柔軟なツールであり、Composable の見た目や動作をカスタマイズするために使用されます。チェーン呼び出しや複数の Modifier の組み合わせにより、複雑な UI 要件を満たすことができます。Modifier を理解し、熟練して使用することで、効率的かつ美しい Compose アプリケーションを開発することができます。

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