如何在 jetpack compose 中将光标从一个文本字段传递到另一文本字段?

2023-11-30

我有两个文本字段,用户将输入他们的体重和目标体重。当用户单击目标体重时,会出现一个选择器,用户可以从中选择自己的体重。如果用户选择他的体重并按下“确定”按钮,我希望它自动切换到目标体重文本字段。

听到的是我的代码

我正在分享示例文本字段

 Column(modifier = Modifier.fillMaxWidth()) {

        TextField(
            value = viewModel.defaultWeightValue.value ,
            modifier = Modifier
                .fillMaxWidth()
                .padding(5.dp),
            onValueChange = { viewModel.currentWeight.value = it },
            label = { Text(text = "current weight (kg)") },
            shape = RoundedCornerShape(5.dp),
            colors = TextFieldDefaults.textFieldColors(
                textColor = Grey2,
                disabledTextColor = Color.Transparent,
                backgroundColor = Grey3,
                focusedIndicatorColor = Color.Transparent,
                unfocusedIndicatorColor = Color.Transparent,
                disabledIndicatorColor = Color.Transparent,
            ),
            interactionSource = remember { MutableInteractionSource() }
                .also { interactionSource ->
                    LaunchedEffect(interactionSource) {
                        interactionSource.interactions.collect {
                            if (it is PressInteraction.Press) {
                                // works like onClick
                                viewModel.isUserClickTxtField.value = true
                            }
                        }
                    }
                }
        )
        TextField(
            value = viewModel.targetWeight.value,
            modifier = Modifier
                .fillMaxWidth()
                .padding(5.dp),
            onValueChange = { viewModel.targetWeight.value = it },
            label = { Text(text = "target weight (kg)") },
            shape = RoundedCornerShape(5.dp),
            colors = TextFieldDefaults.textFieldColors(
                textColor = Grey2,
                disabledTextColor = Color.Transparent,
                backgroundColor = Grey3,
                focusedIndicatorColor = Color.Transparent,
                unfocusedIndicatorColor = Color.Transparent,
                disabledIndicatorColor = Color.Transparent,
                focusedLabelColor = DefaultDYTColor
            )
        )
    }
    DYTLoginAndContinueButton(
        text = "continue",
        navController,
        Screen.SignUpFourthScreen.route
    )
}



 if (viewModel.isUserClickTxtField.value) {
            Column(
                modifier = Modifier.fillMaxSize(),
                verticalArrangement = Arrangement.Bottom
            ) {
                Row(
                    modifier = Modifier
                        .fillMaxWidth()
                        .background(Color.Gray),
                    horizontalArrangement = Arrangement.Center,
                    verticalAlignment = Alignment.CenterVertically
                ) {
                    InfiniteNumberPicker(
                        modifier = Modifier.width(60.dp),
                        list = viewModel.weight,
                        firstIndex = 0,
                        onSelect = {
                            viewModel.weightPickerState.value = it
                        }
                    )
                    Text(text = "kg")
                    InfiniteNumberPicker(
                        modifier = Modifier.width(60.dp),
                        list = viewModel.gram,
                        firstIndex = 0,
                        onSelect = {
                            viewModel.grPickerState.value = it
                        }
                    )
                    Text(text = "gram")
                }
                Row(
                    modifier = Modifier
                        .fillMaxWidth()
                        .height(IntrinsicSize.Min)
                        .background(Color.Gray)
                        .padding(start = 0.dp, top = 15.dp, end = 0.dp, bottom = 15.dp),
                    horizontalArrangement = Arrangement.Center,
                    verticalAlignment = Alignment.CenterVertically
                ) {
                    Text(
                        text = "cancel",
                        fontSize = 16.sp,
                        fontWeight = FontWeight.Bold,
                        color = DefaultDYTColor,
                        modifier = Modifier
                            .padding(8.dp)
                            .clickable {
                                viewModel.isUserClickTxtField.value = false
                            })
                    Divider(
                        color = Color.White,
                        modifier = Modifier
                            .padding(8.dp)
                            .fillMaxHeight()  //fill the max height
                            .width(1.dp)
                    )
    
                  TextButton(onClick = {
                      viewModel.isUserClickTxtField.value = false
                      viewModel.defaultWeightValue.value = "${viewModel.weightPickerState.value}  ${viewModel.grPickerState.value}"
                  }) {
                      Text(
                          text = "Okey",
                          fontSize = 16.sp,
                          fontWeight = FontWeight.Bold,
                          color = DefaultDYTColor,
                          modifier = Modifier.padding(8.dp))
                  }
                }
            }
        }

如果用户单击文本字段viewModel.isUserClickTxtField.value is true并为用户弹出选择器。如果用户在选择器中单击“确定”按钮,则意味着用户在选择器上选择了自己的体重。我想自动切换其他文本字段,我该怎么做?


您可以使用解决方案由 @bylazy 提供,或者您可以使用focusProperties修饰符指定每个项目的下一个/上一个项目TextField或可在您的屏幕中组合

然后只需使用focusManager.moveFocus移动焦点的方法:

focusManager.moveFocus(FocusDirection.Next)

就像是:

    val (item1, item2) = remember { FocusRequester.createRefs() }
    val focusManager = LocalFocusManager.current

    TextField(
        value = text,
        onValueChange = {text = it},
        Modifier
            .focusRequester(item1)
            .focusProperties {
                next = item2
                right = item2
            }
    )

    Button(
        onClick = { focusManager.moveFocus(FocusDirection.Next) }
    ) { Text("OK") }

    TextField(
        value = text,
        onValueChange = {text = it},
        Modifier
            .focusRequester(item2)
    )

在你的第一个TextField您还可以添加keyboardActions属性以移动焦点,单击字段中的“完成”。

   TextField(
        value = text,
        onValueChange = {text = it},
        Modifier
            .focusRequester(item1)
            .focusProperties {
                next = item2
                right = item2
            },
        keyboardOptions = KeyboardOptions.Default.copy(imeAction = ImeAction.Done),
        keyboardActions = KeyboardActions(
            onDone = { focusManager.moveFocus(FocusDirection.Next) }
        )
    )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 jetpack compose 中将光标从一个文本字段传递到另一文本字段? 的相关文章

随机推荐

  • 使用 Google Cloud Storage 的 Apache Drill

    Apache Drill 功能列表提到它可以从 Google Cloud Storage 查询数据 但我找不到任何有关如何执行此操作的信息 我已经让它在 S3 上工作得很好 但我怀疑我在 Google 云存储方面错过了一些非常简单的东西 有
  • 在android studio上设置flutter错误

    为 android studio 设置 flutter 时出错 我试过 重复这个过程 删除android studio并重新启动 创建项目时出错 无法在 Flutter SDK Target 目录中创建项目 C src flutter pa
  • Facebook 使用 C# 使用 Graph API 检索数据

    我使用 c net 创建了桌面 Facebook 应用程序 我想检索用户的消息 帖子和聊天记录 这是检索用户所有信息的便捷方法 我已经开始使用 Facebook Graph API 但我没有得到任何示例 谁能帮我 聚会有点晚了 但无论如何
  • codeigniter - APPPATH 在控制器之后返回路径

    我在整理应用程序中的路径时遇到问题 我正在使用 APPPATH 函数在数据库中读取 写入图像的字符串路径 问题是 APPPATH 将函数放在控制器之后 这是我获取 css 的函数 当我去http localhost project inde
  • 使用 Process.Start() 时 Windows 窗体 MouseUp 触发两次

    在我的 Windows 窗体应用程序中 如果单击其中一项 我必须打开一个包含特定文件夹的新资源管理器窗口 我正在监听 MouseUp 事件 因为我已经有一些点击检测 我需要点击坐标 现在如果我打开一个新的资源管理器窗口 private vo
  • Paho Mqtt Android 连接到代理失败,并显示 (32103)

    我的网络中有一个 ActiveMQ 代理正在监听 1883 mqtt 如果我使用简单的 Java 应用程序和 mqtt client 0 4 0 jar 库连接到该代理 则一切正常 现在我想使用 Android 设备连接到该经纪人 不幸的是
  • 在 R Shiny 应用程序中渲染 R Markdown 文档时参考书目不起作用

    Problem 我正在尝试在 Shiny 应用程序中渲染 R Markdown 文档 我已经使用 David 在这篇文章中非常有用的解决方案成功实现了这一点 Shiny 应用程序中的 RMarkdown 但是 我无法使用 bib 文件中的引
  • function(e){e.something...} e 是什么?

    当我写作时 new lang click function e alert something e stopPropagation What is e在这里 为什么没有它该功能就无法工作 为什么我可以写任何东西而不是e e is the 事
  • 在模块中使用闪亮的 i18n 翻译闪亮的应用程序?

    Problem 我想将模块化闪亮应用程序的部分内容翻译成德语或英语 我想使用的包是shiny i18n这似乎适用于非模块化应用程序 并且似乎很容易处理 然而 在下面的模块化闪亮玩具示例中 翻译不起作用 有什么建议为什么会发生这种情况吗 服务
  • Nodejs - net 或 http 模块

    我正在做聊天系统nodejs 要创建节点服务器 我可以使用net or http模块 那么使用它们的区别和好处是什么 http是建立在net 它处理 HTTP 底层的 TCP 层 我想你的 聊天系统 将有基于浏览器的客户端 因为 Node
  • 如何等待非子进程退出

    对于子进程 wait and waitpid 函数可用于暂停当前进程的执行 直到子进程退出 但该函数不能用于非子进程 是否还有另一个函数可以等待任何进程的退出 没有什么相当于wait 通常的做法是使用轮询kill pid 0 并寻找返回值
  • 是否可以让 C++ 方法接受 const char* 和 const wchar_t* 作为参数而不重载该方法?

    UPDATE 我选择了模板方法 因为它看起来最优雅 简洁 但最终我得到了这样的东西 template
  • 将 RData 文件读入 Shiny 应用程序

    我正在开发一个闪亮的应用程序 它将读取一些 RData 文件并显示包含内容的表格 这些文件由脚本生成 最终将数据转换为数据帧 然后使用 save 函数保存它们 在闪亮的应用程序中 我有三个文件 ui R server R 和 global
  • 如何只显示角边框?

    我想知道是否可以在 CSS 中制作边框 但仅限于角 像这样的事情 CONTENT 您可以使用多个线性渐变作为背景图像来实现这一点 div width 100px height 100px background linea
  • 是否可以检查用户何时下载我的 ios 应用程序? [复制]

    这个问题在这里已经有答案了 是否可以检查用户何时下载了我的 iOs 应用程序 如果可以 是否可以从中创建一个 if 语句 例如 if downloadDate gt 1march 抱歉 如果您认为这个问题很糟糕 任何代码将不胜感激 D 还应
  • C# Process.Start 参数被截断

    当传递很长的文件路径时 我的参数被截断 我需要启动一个程序并通过命令参数传递所有内容 有时它只是截断命令 它是在全局范围内进行的 因此这不仅是每个参数的问题 而且是整个参数的问题 编辑 问题可能是命令行长度的限制monkey p说 问题是
  • 通过 C 代码计算 Minix 系统上正在运行的进程数

    所以 一开始这看起来很简单 但是在爬行谷歌和这里之后 答案似乎并不像我最初想象的那么简单 基本上 我正在编辑一个 MINIX 内核 作为我的操作系统课程实践的一部分 并且我必须添加一个小功能 当您在信息服务器中按下功能键时 它会显示正在运行
  • 将数据框转换为命名向量

    我在我的 dfm 上应用了一个模型 wordscore 结果我得到了一个输出对象 其类是 textmodel wordscores textmodel list 我对输出 wordscores 感兴趣 它是一个 数字 对象 这就是当clas
  • Java 返回在特定条件下首先执行的 Future,或者同时处理两者

    我有两个 API 它们返回两个不同的结果类 我们将这两个结果结合起来得到一个 FinalClass 基本上 如果这些Api同时运行 如果它首先收到具有特定结果 G H 的A类 则B类是什么并不重要 我们不会等待serviceAPI B 只需
  • 如何在 jetpack compose 中将光标从一个文本字段传递到另一文本字段?

    我有两个文本字段 用户将输入他们的体重和目标体重 当用户单击目标体重时 会出现一个选择器 用户可以从中选择自己的体重 如果用户选择他的体重并按下 确定 按钮 我希望它自动切换到目标体重文本字段 听到的是我的代码 我正在分享示例文本字段 Co