我想在 Jetpack Compose 中自定义可组合的文本字段
。我正在尝试在下图中实现结果,但不知何故 TextField
有一些默认填充,我找不到如何更改其值。我想删除默认填充并自定义它
(右边的图片是我取得的结果。我画了一个边框,以便您可以看到它有填充,顺便说一句,下面的文本字段只是文本可组合对象,它们不是
文本字段
)
下面是我的文本字段
代码
TextField(
value = "",
onValueChange = {},
modifier = Modifier
.weight(1F)
.padding(0.dp)
.border(width = 1.dp, color = Color.Red),
placeholder = {
Text(
"5555 5555 5555 5555", style = TextStyle(
color = Color.Gray
)
)
},
colors = TextFieldDefaults.textFieldColors(
backgroundColor = Color.Transparent,
unfocusedIndicatorColor = Color.Transparent,
focusedIndicatorColor = Color.Transparent
),
)
谢谢大家,我确实使用了BasicTextField并取得了我想要的结果:)
@Composable
fun BottomOutlineTextField(placeholder: String, value: String, onValueChange: (String) -> Unit) {
BasicTextField(
modifier = Modifier.fillMaxWidth(),
value = value,
onValueChange = onValueChange,
textStyle = TextStyle(
color = if (isSystemInDarkTheme()) Color(0xFF969EBD) else Color.Gray
),
decorationBox = { innerTextField ->
Row(modifier = Modifier.fillMaxWidth()) {
if (value.isEmpty()) {
Text(
text = placeholder,
color = if (isSystemInDarkTheme()) Color(0xFF969EBD) else Color.Gray,
fontSize = 14.sp
)
}
}
innerTextField()
}
)
}
在最新的alpha版本(androidx.compose.material:material:1.2.0-alpha04)中,他们公开了TextFieldDefaults.TextFieldDecorationBox
。
这是在材料 TextField
实现中使用的装饰框
可组合的实现。
您可以按如下方式使用它:
val interactionSource = remember { MutableInteractionSource() }
BasicTextField(
value = value,
onValueChange = onValueChange,
modifier = modifier,
visualTransformation = visualTransformation,
interactionSource = interactionSource,
enabled = enabled,
singleLine = singleLine,
) { innerTextField ->
TextFieldDefaults.TextFieldDecorationBox(
value = value,
visualTransformation = visualTransformation,
innerTextField = innerTextField,
singleLine = singleLine,
enabled = enabled,
interactionSource = interactionSource,
contentPadding = PaddingValues(0.dp), // this is how you can remove the padding
)
}
这将允许您删除填充,但仍能获得 TextField
附带的其余功能。
请记住对 BasicTextField
和 TextFieldDefaults.TextFieldDecorationBox
使用相同的 MutableInteractionSource
。
我上面链接的官方文档显示了更多示例(如果它的用法)。
您可以使用BasicTextField
,它是一个没有任何装饰的纯文本字段。请注意,它也没有占位符/提示,如果需要,您必须自己实现它们。
BasicTextField(value = "", onValueChange = {}, Modifier.fillMaxWidth())
从 1.2.0-alpha04 开始,使 BasicTextField 看起来像 TextField
或 OutlinedTextField
要容易得多。您可以复制
TextField
的源代码,这非常短,因为大部分逻辑都移到了 TextFieldDefaults.TextFieldDecorationBox 中,并将所需的填充值传递给 TextFieldDefaults.TextFieldDecorationBox
的 contentPadding
参数。
我是jetpack compose的新手,从< code>JetpackCompose基础代码中学习它,所以我在创建一个高性能的懒惰列表中找到了它 注意:LazyColumn不会像那样回收其子项。当您滚动浏览它时,它会发出新的,并且仍然具有高性能,因为与实例化Android视图相比,发出相对便宜。 因此,发出新的可组合项是多么的便宜和高效,那么为什么不使用列并一次性组合整个列表,而不是在滚动时不断
以下是 BottomNav 实现的概述。该应用程序正确显示底部导航栏,但当选择某个项目时,它会多次调用NavHost。我看到Jetpack撰写样本 https://github.com/android/compose-samples/tree/main/Jetsnack 一个类似的问题。是否有任何解决方法可以避免多次Navhost调用?
我将我的按钮定义为这样的可组合按钮: 我已经检查了调试器,返回合适的颜色(白色)(0xFFFFFFFF) 但是我不能让按钮上的文字变成白色。 这是预览 设置会导致文本颜色的变化,但我想从按钮颜色设置它,而不是为文本设置一种唯一的颜色 将按钮的文本样式颜色设置为未指定后,它仍然不起作用: 形状是Android Studio项目生成器的默认形状 颜色 主题 排印
我刚刚开始使用Jetpack作曲工具包。我添加了和一个设置 作为参数,它工作得非常好。但是每次我添加或更改某些内容时,它本身都不会自动刷新,因此我必须手动执行此操作。
我想根据条件更改我的开始导航片段。我的起始片段可以是片段1或片段2。有没有办法实现它?
可以在Jetpack Compose中进行权重吗?例如,我想以这样一种方式设置它,即一个项目被加权为布局的1/3,而另一个占剩余的2/3。 在XML/ViewGroup样式中,可以使用LinearLayouts和ConstraintLayouts来实现这一点。然而,令我沮丧的是,使用Jetpack Compose似乎是不可能的。 示例: 在ConstraintLayout中,这是按如下方式完成的:
我创建了一个项目,并添加了插件和dependency,我还对其进行了测试,结果很好。但当我重构项目以使用并启用jetifier工具项目不会构建,我会遇到多个错误,如: 转换文件“crashlytics-2.9.2.aar”以匹配属性{artifactType=jetitied-aar}失败 似乎< code>jetifier工具和< code>Crashlytics依赖项有问题。有没有办法关闭单个
几天来,我一直试图成功地构建我正在进行的项目(使用Jetpack Compose),但当我更新gradle构建插件和其他一些依赖项时,我无法正确运行该项目。有一些gradle版本与dagger-hilt依赖项冲突,我不知道如何修复它。我正在使用Android Studio的金丝雀测试版。 这里还有我所有的gradle构建文件: Gradle构建模块应用程序: Gradle构建(项目层级): 错误: