Day*_*Day 6 android android-layout android-jetpack-compose android-compose-button android-jetpack-compose-button
我正在 Jetpack Compose 中构建一个可重用的 Button 组件,它基本上是一个Row. 该按钮的左端应有文本,右端应有图标。这可以直接像这样工作:
@Composable
fun MyButton(
text: String,
modifier: Modifier = Modifier
) {
Button(
onClick = { /* */ },
modifier = modifier
) { // RowScope
Text(
text = text
)
Spacer(modifier = Modifier.width(8.dp))
Icon(
painter = painterResource(
id = android.R.drawable.ic_dialog_info
),
contentDescription = null
)
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果按钮应用固定宽度,则文本和图标将居中而不是在左/右端。
所以我尝试添加modifier = Modifier.weight(1F)到,Text以便它填满任何额外的空间。但这会导致没有固定宽度的按钮占用尽可能多的空间。
如何构建一个可在两种情况下工作的 Compose 组件:定义宽度时和换行到内容时?
我的屏幕布局:
@Composable
fun MyScreen() {
Column(
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier.fillMaxSize()
) {
Spacer(modifier = Modifier.height(8.dp))
MyButton(
text = "variable width",
modifier = Modifier.wrapContentWidth()
)
Spacer(modifier = Modifier.height(8.dp))
MyButton(
text = "fixed width",
modifier = Modifier.width(300.dp)
)
}
}
Run Code Online (Sandbox Code Playgroud)
a 的内容Button是 a RowScope。只需将weight(1f)修饰符应用于Textwith即可TextOverflow.Ellipsis。
就像是:
Button(
onClick = { /* */ },
modifier = modifier.width(IntrinsicSize.Max)
) { // RowScope
Text(
text = text,
maxLines = 1,
modifier = Modifier.weight(1f),
overflow = TextOverflow.Ellipsis
)
Spacer(modifier = Modifier.width(8.dp))
Icon(
painter = painterResource(
id = android.R.drawable.ic_dialog_info
),
contentDescription = null
)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1285 次 |
| 最近记录: |