次のようにボタンに高さを設定しても、何故か48dpまで余白が設定されてしまう。
Button(
onClick = {},
modifier = Modifier
.border(width = 1.dp, color = Color.Blue)
.heightIn(min = 36.dp)
) {
Text("36dp")
}
対応策
LocalMinimumTouchTargetEnforcement
にfalse
をセットする。(ExperimentalMaterial3Api
であることに注意)
CompositionLocalProvider(LocalMinimumTouchTargetEnforcement provides false) {
Button(
onClick = {},
modifier = Modifier
.border(width = 1.dp, color = Color.Blue)
.heightIn(min = 36.dp)
) {
Text("36.dp")
}
}
詳細
ButtonはSurfaceを使って実装されているが、Surface内でタップ領域として48dpを確保している。
https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Surface.kt;l=223;drc=f683eb9211f4df84f04e6437df3804135f8cf62e?hl=ja
2024/9/26 追記
仕様が変わったようです。LocalMinimumTouchTargetEnforcement
ではなく、 LocalMinimumInteractiveComponentSize
で最小のタッチサイズ指定する形になりました。
CompositionLocalProvider(LocalMinimumInteractiveComponentSize provides 0.dp) {
Button(
onClick = {},
modifier = Modifier
.border(width = 1.dp, color = Color.Blue)
.heightIn(min = 36.dp)
) {
Text("36.dp")
}
}