当前位置: 首页 > 知识库问答 >
问题:

删除喷气背包上的默认填充 撰写文本字段

夏侯自珍
2023-03-14

我想在 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
    ),
)

共有3个答案

梁浩涆
2023-03-14

谢谢大家,我确实使用了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()
        }
    )
}
容修贤
2023-03-14

在最新的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 附带的其余功能。

请记住对 BasicTextFieldTextFieldDefaults.TextFieldDecorationBox 使用相同的 MutableInteractionSource

我上面链接的官方文档显示了更多示例(如果它的用法)。

夹谷英杰
2023-03-14

您可以使用BasicTextField,它是一个没有任何装饰的纯文本字段。请注意,它也没有占位符/提示,如果需要,您必须自己实现它们。

BasicTextField(value = "", onValueChange = {}, Modifier.fillMaxWidth())

从 1.2.0-alpha04 开始,使 BasicTextField 看起来像 TextFieldOutlinedTextField容易得多。您可以复制 TextField 的源代码,这非常短,因为大部分逻辑都移到了 TextFieldDefaults.TextFieldDecorationBox 中,并将所需的填充值传递给 TextFieldDefaults.TextFieldDecorationBoxcontentPadding 参数。

 类似资料:
  • 我是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构建(项目层级): 错误: