以下是可组合的表单文本字段的代码:

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun FormTextFieldComponent(
    topText: String,
    initialText: String=""
) = Column(
    modifier = Modifier
        .fillMaxSize()
        .padding(16.dp)
) {
    // Small Text at the top (dynamic content)

    var textState by remember { mutableStateOf(TextFieldValue(initialText)) }

    OutlinedTextField(
        value = textState,
        onValueChange = {
            textState = it
        },
        label = { Text(topText) }
    )
}

但是,它只在下面的代码中出现一次(只显示第一个文本字段):

FormTextFieldComponent("First Name", "Van")
Spacer(modifier = Modifier.height(1.dp))
FormTextFieldComponent("Last Name", "Chen")
Spacer(modifier = Modifier.height(1.dp))

怎么啦?

推荐答案

简单的回答是: 您使用的是fillMaxSize(),因此当渲染第一个Textfield时,它将充满整个屏幕,然后第二个将在屏幕外渲染. 所以你应该用fillMaxWidth()而不是fillMaxSize()

Column(
    modifier = Modifier
        .fillMaxWidth()
        .padding(16.dp)
) 

您可以使用以下代码来证明这一点,包装其中一个TextField并将其zoom 为完整大小的0.5

@Composable
fun Greeting(modifier: Modifier = Modifier) {
    val scrollState = rememberScrollState()

    Column(
        modifier = modifier.fillMaxSize()
    ) {
        Box(modifier = Modifier.fillMaxSize(0.5f)){
            FormTextFieldComponent(topText = "First Name", initialText = "Van")
        }
        Spacer(modifier = Modifier.height(10.dp))
        FormTextFieldComponent(topText = "Last Name", initialText = "Chen")
        Spacer(modifier = Modifier.height(1.dp))
    }
}

proving the first text field was using all the screen size

另外,作为对大小有更多控制的建议,请try 始终将modifier参数设置为可组合函数,如下所示:

@Composable
fun FormTextFieldComponent(
    modifier: Modifier = Modifier,
    topText: String,
    initialText: String=""
) {
    Column(
        modifier = modifier
            .fillMaxWidth()
            .padding(16.dp)
    ){ }
}

是一种很好的做法,以便从父级修改这一点.

Android相关问答推荐

致命异常:java.lang. SecureExcellent::用户10021和当前进程都没有android. permissions.Change_WIFI_STATE

将Any强制转换为Integer将从API返回NullPointerException

Google Play测试应用程序Crash-java.lang.NoSuchFieldError:没有Lkotlinx/coroutines/CoroutineExceptionHandler类型的字段键

合成-删除图像的部分背景

在Jetpack Compose中,material 3 Textfield上的底部边框 colored颜色 是如何更改的?

Android,从C++调用的铁 rust 库缺少符号

第一次使用onBackPressed()、NavigateUp()加载时MapView崩溃

如何隐藏OutlinedTextField边框上的提示标签

如何在android库中关联应用程序链接?

React-Native Manifest 合并失败并出现多个错误

expo 上的 socket.io 无法从 Android 连接

Jetpack Compose - 在屏幕外偏移绘制形状并使用非常大的尺寸

通知使用默认语言,屏幕显示多种语言,同时通过 AppCompatDelegate 设置应用程序语言

如何在 Jetpack Compose 中的特定位置绘制图像

我该怎么做文本计时器

如何关闭可组合对话框?

无法 HEAD 'https://jcenter.bintray.com/com/facebook/react/react-native/maven-metadata.xml'

无法解析依赖项'com.github.smarteist:autoimageslider:1.4.0-appcompat'

从expose 的 dropdownMenu 可组合、jetpack 组合中 Select 选项时,不会触发文本字段的 onValueChange

现代Android中的后台处理