您究竟如何才能在 中添加 Margin Jetpack Compose?
我可以看到有一个Modifier用于填充,Modifier.padding(...)但我似乎无法找到一个用于边距的,或者我是瞎子吗?
请有人指导我。
非常感谢。
我目前正在尝试实现一个 gridview,它由 2 列组成。我知道我可以使用列和行来实现我自己的网格视图,但我只想使用现有的方法,尽管它是实验性的。
@Composable
fun MyGridScreen() {
LazyVerticalGrid(cells = GridCells.Fixed(2), modifier = Modifier.fillMaxSize(),contentPadding = PaddingValues(12.dp)) {
items(15) {
Box(
contentAlignment = Alignment.Center,
modifier = Modifier
.padding(10.dp)
.height(80.dp)
.background(Color.Red)
.aspectRatio(1f)
) {
Text("Grid item $it", color = Color.White)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
下面是我取得的结果。我无法在该项目下方添加空格:(
我有一个带有可滚动垂直列的简单屏幕。它包含一些文本和图像。
Column(
modifier = Modifier
.fillMaxWidth()
.padding(16.dp)
.verticalScroll(rememberScrollState()),
) {
...
}
Run Code Online (Sandbox Code Playgroud)
内容是可滚动的,但它会剪切到定义的填充。这意味着当您滚动时,您可以看到过度滚动阴影不会填充整个屏幕,但它会绑定到填充。看起来真的很糟糕:
在 XML 世界中,您可以用来android:clipToPadding="false"“填充”容器。Compose 中有类似的东西吗?
我正在尝试删除填充,TextButton但它不起作用。
TextButton(
onClick = {},
modifier = Modifier.padding(0.dp)
) {
Text(
" ${getString(R.string.terms_and_conditions)}",
color = MaterialTheme.colors.primary,
fontFamily = FontFamily(Font(R.font.poppins_regular)),
fontSize = 10.sp,
)
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过在属性中设置height和但填充仍然存在sizeModifier
android kotlin android-jetpack-compose android-compose-button android-jetpack-compose-button
这就是我想要实现的目标:

因此,我连续创建了 2 个圆形按钮,并根据是否选择它们提供了不同的背景颜色。目标是创建一种选项卡/切换的错觉。
未选中的按钮将具有与该行的背景颜色相同的颜色。不幸的是,由于行是矩形形状,因此在拐角处有残留空间,但仍然显示背景颜色。


这是我的按钮代码
val cornerRadius = 20.dp
var selectedIndex by remember { mutableStateOf(0)}
val configuration = LocalConfiguration.current
val screenWidth = configuration.screenWidthDp.dp
val items = listOf(
OutlinedButton(onClick = { /*TODO*/ }) {
},
OutlinedButton(onClick = { /*TODO*/ }) {
})
Row(
modifier = Modifier
.padding(top = 8.dp)
.wrapContentHeight()
.width(screenWidth).background(color = Color.Gray).clip(shape = RoundedCornerShape(20.dp))
) {
// Spacer(modifier = Modifier.weight(1f))
items.forEachIndexed { index, item ->
OutlinedButton(modifier = Modifier
.wrapContentHeight()
.width(screenWidth/2),
shape = when (index) {
// left outer button …Run Code Online (Sandbox Code Playgroud) 期待
现实
(请忽略具体颜色;外部背景颜色为紫色,内部背景颜色为红色)
编写代码
@Preview
@Composable
fun MyCta() {
MaterialTheme() {
Box(
modifier = Modifier
.clip(RoundedCornerShape(50))
.padding(32.dp)
.background(MaterialTheme.colors.primary)
) {
Text(
"Tap to continue",
Modifier
.padding(8.dp)
.background(Color.Red)
,
color = MaterialTheme.colors.onPrimary
)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的期望落空了吗?为什么?
我有一个 Row 组件,由于填充修饰符的原因,该组件在整个区域都不可单击。如何使该组件在整个区域上可单击并具有相同的填充效果?
@Composable
fun UserRow() {
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier
.fillMaxWidth()
.padding(16.dp)
.clickable {
/* ... */
}
) {
Icon(
/* ... */
)
Text(
/* ... */
)
}
}
}
Run Code Online (Sandbox Code Playgroud) 我的 Jetpack Compose 应用程序中的 RadioButton 组件出现问题。我有一些带有文本的单选按钮,默认情况下有很多填充。我可以删除此填充或设置自定义填充以避免每个填充之间存在大量空间吗?
目前我有这个:
我的代码是:
Column {
MyEnum.values().filter { rb -> rb.visible }.forEach { rb ->
Row(
Modifier
.fillMaxWidth()
.padding(horizontal = 0.dp, vertical = 0.dp)
.clickable(
interactionSource = interactionSource,
indication = null
) {
TODO()
},
verticalAlignment = Alignment.CenterVertically
) {
RadioButton(
selected = (rb.position == selectedOption),
onClick = {
TODO()
},
colors = RadioButtonDefaults.colors(
selectedColor = DialogOutlinedTextFocus,
unselectedColor = DialogOutlinedTextUnfocus
)
)
Text(
text = stringResource(id = rb.idText),
color = Color.Black,
fontSize = 14.sp,
modifier = …Run Code Online (Sandbox Code Playgroud) 在正常情况下,我们可以有 onTouchEvent
override fun onTouchEvent(event: MotionEvent?): Boolean {
when (event?.action) {
MotionEvent.ACTION_DOWN -> {}
MotionEvent.ACTION_MOVE -> {}
MotionEvent.ACTION_UP -> {}
else -> return false
}
invalidate()
return true
}
Run Code Online (Sandbox Code Playgroud)
在 Jetpack Compose 中,我只能发现我们有tapGestureFilterin 修饰符,它只执行来自ACTION_UPonly的动作。
Modifier
.tapGestureFilter { Log.d("Track", "Tap ${it.x} | ${it.y}") }
.doubleTapGestureFilter { Log.d("Track", "DoubleTap ${it.x} | ${it.y}") }
Run Code Online (Sandbox Code Playgroud)
onTouchEventJetpack Compose是否有等价物?
Modifier.graphicsLayer{}这与使用旋转或平移图像不同。我想要在屏幕上移动、旋转和缩放可组合项,而不是在固定位置。
我想要实现的目标如下图所示
Modifier.graphicsLayer{}和的顺序Modifier.pointerInput()很重要。如果Modifier.pointerInput()放置在Modifier.graphicsLayer{}Composable 的触摸区域缩放、平移和旋转之后。
@Composable
private fun Test() {
var offsetLeft by remember { mutableStateOf(Offset.Zero) }
var offsetRight by remember { mutableStateOf(Offset.Zero) }
var rotationLeft by remember { mutableStateOf(0f) }
var rotationRight by remember { mutableStateOf(0f) }
val modifierLeft = Modifier
.border(3.dp, Color.Red)
.graphicsLayer {
translationX = offsetLeft.x
translationY = offsetLeft.y
rotationZ = rotationLeft
}
.border(2.dp, Color.Green)
.pointerInput(Unit) {
detectTransformGestures { centroid, pan, zoom, rotation ->
offsetLeft += pan
rotationLeft += rotation …Run Code Online (Sandbox Code Playgroud) android android-jetpack-compose android-jetpack-compose-gesture
android ×7
kotlin ×3
android-jetpack-compose-button ×1
android-jetpack-compose-gesture ×1
button ×1
row ×1