Open7
【メモ】JetpackComposeのTextFieldの余白などの対策【余計な奴ら】
環境
AndroidStudio Hedgehog
Kotlin 1.8.10
JetpackCompose 1.6.1
参考はここに
TextFieldの内側にある余白を消したいとき
カスタムレイアウトとして自作のTextField
を作成する必要がある。
雛形はデフォルトのTextField
からちょろまかそう。
TextField
を構成しているBasicTextField
のTextFieldDecorationBox
の引数にcontentPadding
が設定されていないのが原因。
設定されていない場合16.dp
が渡される。
自身で設定できるようにするとこんな感じ。
@Composeable
fun HogeTextField(
// 中略
innerPadding: Dp = 0.dp
){
//中略
decorationBox = @Composable { innerTextField ->
TextFieldDefaults.TextFieldDecorationBox(
// 中略
contentPadding = TextFieldDefaults.textFieldWithLabelPadding(
start = innerPadding,
top = innerPadding,
end = innerPadding,
bottom = innerPadding
)
)
}
)
}
フォントサイズが小さく要素が少ない場合、BasicTextField
のModifier.defaultMinSize
に引っかかることで、余白が産まれる場合もある。
// 色々省略
BasicTextField(
modifier = modifier
.defaultMinSize(
minWidth = TextFieldDefaults.MinWidth //280.dp,
minHeight = TextFieldDefaults.MinHeight //56.dp
)
)
おそらく0.dp
に置き換えてしまっても特に問題ない?
背景色や下線を消したい
TextField
にはModifier.background
以外に、内部のBasicTextField
の背景色がある。
これが地味にうっとおしい。
下線もたまに邪魔になる。
colors引数から色々と変えられる。
TextField(
// 略
colors = TextFieldDefaults.textFieldColors(
backgroundColor = Color.Transparent, // 背景色を透明にする
unfocusedIndicatorColor = Color.Transparent // 非選択時の下線を透明にする
)
)
TextField
では、内部のBasicTextField
のmodifier.background
で背景の設定が、modifier.indicatopLine
で下線の追加が、それぞれcolors
引数の値で行われている。
例えば.indicatorLine
を消した場合、下線は追加されなくなる。