Compose笔记(二十)--TextField

        这一节主要了解一下Compose的TextField,TextField 是一个用于接收用户文本输入的 UI 组件,允许用户通过键盘输入、编辑或删除文本。简单用法总结如下:

API
value:当前输入的文本内容。
onValueChange
含义:当用户输入文本时触发的回调函数,参数为新输入的文本。
作用:更新 value 的值,从而实现输入框内容的实时更新。
label:输入框顶部的提示文本(聚焦时上浮)。
placeholder:输入框为空时的占位提示。
leadingIcon 和 trailingIcon:
含义:分别是输入框左侧和右侧的图标。
作用:用于提供额外的视觉信息或交互功能。
keyboardOptions:
含义:用于配置键盘的选项,如键盘类型、输入法操作等。
作用:根据输入内容的类型定制键盘。
keyboardActions:
含义:处理键盘操作的回调,如按下回车键时的操作。
作用:实现键盘操作的自定义逻辑。
maxLines:限制输入框的最大行数(1 表示单行,Int.MAX_VALUE 表示多行)。
isError:
含义:一个布尔值,用于标记输入框的内容是否存在错误。
作用:当存在错误时,输入框会显示错误样式。
visualTransformation:
含义:对输入的文本进行视觉转换,例如密码输入时将文本显示为圆点。
作用:改变输入文本的显示形式。
OutlinedTextField:
含义:带有轮廓边框的输入框,是 TextField 的一种变体。
作用:提供更清晰的视觉边界,适用于需要突出显示输入框的场景。
BasicTextField:
含义:一个基础的输入框组件,没有默认的样式和交互效果。
作用:用于需要自定义样式和交互的场景。

栗子:

import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
import androidx.compose.material.Text
import androidx.compose.material.TextField
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp@Composable
fun TestTextField() {var text by remember { mutableStateOf("") }Column(modifier = Modifier.padding(16.dp)) {TextField(value = text,onValueChange = { text = it },label = { Text("用户名") },placeholder = { Text("请输入用户名") },singleLine = true)}
}

多行文本输入 

import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
import androidx.compose.material.Text
import androidx.compose.material.TextField
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp@Composable
fun TestMultiLineTextField() {var text by remember { mutableStateOf("") }var isError by remember { mutableStateOf(false) }Column(modifier = Modifier.padding(16.dp)) {TextField(value = text,onValueChange = {text = itisError = text.length < 10},label = { Text("备注") },placeholder = { Text("请输入至少10个字符的备注") },singleLine = false,maxLines = 3,isError = isError)if (isError) {Text(text = "备注内容至少需要10个字符",color = androidx.compose.ui.graphics.Color.Red,modifier = Modifier.padding(start = 16.dp))}}
}

带图标和键盘操作的文本输入 

import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.Icon
import androidx.compose.material.Text
import androidx.compose.material.TextField
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusManager
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.unit.dp
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Email
import androidx.compose.runtime.remember
import androidx.compose.ui.text.input.KeyboardType@Composable
fun TestTextFieldThree() {var text by remember { mutableStateOf("") }val focusManager: FocusManager = LocalFocusManager.currentColumn(modifier = Modifier.padding(16.dp)) {TextField(value = text,onValueChange = { text = it },label = { Text("邮箱") },placeholder = { Text("请输入邮箱地址") },leadingIcon = { Icon(Icons.Filled.Email, contentDescription = null) },keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Email,imeAction = ImeAction.Done),keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }))}
}

 与下拉菜单联动的 TextField

import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
import androidx.compose.material.DropdownMenu
import androidx.compose.material.DropdownMenuItem
import androidx.compose.material.Text
import androidx.compose.material.TextField
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp@Composable
fun TextFieldWithDropdown() {val options = listOf("苹果", "香蕉", "橙子", "葡萄")var expanded by remember { mutableStateOf(false) }var selectedText by remember { mutableStateOf("") }Column(modifier = Modifier.padding(16.dp)) {TextField(value = selectedText,onValueChange = {selectedText = itexpanded = true},label = { Text("选择水果") },modifier = Modifier.padding(bottom = 8.dp))DropdownMenu(expanded = expanded,onDismissRequest = { expanded = false },modifier = Modifier.padding(top = 40.dp)) {options.forEach { option ->DropdownMenuItem(onClick = {selectedText = optionexpanded = false}) {Text(text = option)}}}}
}

注意:
1 避免不必要的重绘:TextField 内容变化时会触发重绘,因此要避免在 onValueChange 中执行耗时操作,以免影响性能。
2 布局约束:使用 Modifier 对 TextField 进行布局时,要注意布局约束。例如,fillMaxWidth() 会让输入框填满可用宽度,可能会影响其他组件的布局。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/78847.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Linux虚拟机下使用vscode,#include无法跳转问题

总结&#xff1a;需要通过Linux指令来添加编译器和压缩文件&#xff0c;解压&#xff0c;这样获得的编译器会具有可执行权限类似于 -rwxr-xr-x 1 user user 12345 Apr 26 14:22 myscript.sh 如果你直接从window中拖入文件到Linux文件下&#xff0c;你需要自己来再度开启可编译…

ArcGIS+GPT:多领域地理分析与决策新方案

技术点目录 AI大模型应用ArcGIS工作流程及功能prompt的使用技巧AI助力工作流程AI助力数据读取AI助力数据编辑与处理AI助力空间分析AI助力遥感分析AI助力二次开发AI助力科研绘图ArcGISAI综合应用了解更多 ——————————————————————————————————…

基础术语说明

车间&#xff1a;工厂内集中进行加工或装配的独立空间&#xff0c;配备设备、工具及人员&#xff0c;是生产活动的核心载体。 比如装配车间、总装车间、油漆车间等 生产线&#xff1a;以流水作业形式将原材料转化为成品的设备与人员的组合系统&#xff0c;强调连续性和效率。…

Splunk 使用Role 实现数据隔离

很多人知道 Splunk 有很多自带的Role, 今天我就要说说定制化的Role: 1: 在创建新role 的界面: 2: 在如下的界面,可以定制allow index name: 3: 创建好新Role 后,在SAML 添加新的group 的时候,就可以看到Role 给某个group: 4: 这样一个特定组的人来申请Splunk 权限,就可…

利用李雅普诺夫稳定性理论设计模型参考自适应系统(2.0)

上一篇介绍了利用李雅普诺夫稳定性理论设计模型参考自适应系统&#xff0c;通过在被控对象前面添加一个可调增益&#xff0c;然后利用李雅普诺夫稳定性理论设计增益的自适应率&#xff0c;使得被控对象输出与参考模型输出一致。本文将介绍在系统结构中引入前馈和反馈的结构&…

前端封装WebSocket工具n

Web API 提供的 WebSocket 类&#xff0c;封装一个 Socket 类 // socket.js import modal from /plugins/modal const baseURL import.meta.env.VITE_APP_BASE_WS; const EventTypes [open, close, message, error, reconnect]; const DEFAULT_CHECK_TIME 55 * 1000; // 心…

TCP和UDP传输层协议

TCP&#xff08;Transmission Control Protocol&#xff09;和 UDP&#xff08;User Datagram Protocol&#xff09;是两种常见的传输层协议&#xff0c;它们在网络通信中发挥着不同的作用。二者在连接建立、可靠性、传输效率等方面存在显著差异&#xff0c;适用于不同的应用场…

空域伦理与AI自主边界的系统建构

在AI无人系统逐步参与城市空域治理的过程中&#xff0c;系统的“自主性”已不再仅是技术指标&#xff0c;而是直接影响合规性、安全性与社会接受度的伦理边界议题。AI决策系统是否拥有“强干预能力”&#xff1f;行为触发责任应归属何方&#xff1f;算法可否调优至“自我纠偏”…

在原生代码(非webpack)里使用iview的注意事项

最近公司在做一个项目&#xff0c;使用的框架是iview,使用过程中同事遇到一些问题&#xff0c;这些问题对于有些同学来说根本就不是问题&#xff0c;但总会有同学需要&#xff0c;为了帮助不太会用的同学快速找到问题&#xff0c;做了如下整理&#xff1a; 下载vue,iview.min.j…

java代码混淆

生成jar的时候混淆 目前最常用的Proguard,网上有很多介绍的文章&#xff0c;这种安全性较低 对已经生成的jar进行加密 加密库:https://github.com/li571312729/classfinal 测试对jar进行加密 加密后如果正常调用的话会失败 加密后jar反编译查看不到代码 使用密码才能调用机…

【Linux】第十三章 访问Linux文件系统

目录 1. 存储设备是什么&#xff1f;怎么理解分区和格式化&#xff1f; 2. 文件系统是什么&#xff1f; 3. 挂载是什么&#xff1f;挂载点是什么&#xff1f; 4. 怎么理解块设备&#xff1f; 5. 在SATA附加存储中&#xff0c;第一磁盘上的第一个分区和第二磁盘的第二个分区…

MCP 服务器搭建【stdio 类型】实现上市公司年报查询总结,配合 Cherry Studio使用简单

代码解释 这段 Python 代码的主要功能是搭建一个基于 FastAPI 的 MCP 服务器,用于处理通过股票代码查询上市公司年报的请求,实现服务器向客户端的实时消息推送。以下是对代码各部分的详细解释: 完整代码+使用 Cherry Studio 调用 MCP 服务器的方法,放在文章最后了 1. 导…

第六节:软件安装

理论知识 软件安装的方式&#xff1a;在 Linux 系统中&#xff0c;常见的软件安装方式有源码安装、在线安装、deb 包安装、RPM 包安装、使用 Snap 管理软件包等。不同的安装方式适用于不同的软件和场景。源码安装&#xff1a;源码安装是指从软件的源代码开始&#xff0c;进行编…

ubantu部署yolov5(第四集:模型加速)

参考链接&#xff1a; GitHub - ultralytics/yolov5: YOLOv5 &#x1f680; in PyTorch > ONNX > CoreML > TFLite TFLite,ONNX,CoreML,TensorRT Export -Ultralytics YOLO Docs 使用Neural Magic 的 DeepSparse 部署YOLOv5 -Ultralytics YOLO 文档 sparseml/inte…

flutter 专题 五十六 Google 2020开发者大会Flutter专题

由于疫情的原因&#xff0c;今年的Google 开发者大会 (Google Developer Summit) 在线上举行&#xff0c;本次大会以“代码不止”为主题&#xff0c;全面介绍了产品更新以及一系列面向本地开发者的技术支持内容。我比较关注的是移动开发&#xff0c;在本次大会上&#xff0c;关…

开源模型应用落地-qwen模型小试-Qwen3-8B-快速体验-pipeline方式(二)

一、前言 阿里云最新推出的 Qwen3-8B 大语言模型,作为国内首个集成“快思考”与“慢思考”能力的混合推理模型,凭借其 80 亿参数规模及 128K 超长上下文支持,正在重塑 AI 应用边界。该模型既可通过轻量化“快思考”实现低算力秒级响应,也能在复杂任务中激活深度推理模式,以…

「动态规划::背包」01背包 / AcWing 2(C++)

概述 AcWing 2&#xff1a; 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的体积是 v[i]&#xff0c;价值是 w[i]。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 输入格式 第一…

Java 中的 设计模式详解

一&#xff1a;设计模式概述 &#xff08;1&#xff09;概述 &#xff08;2&#xff09;分类 创建型 行为型 结构型 二&#xff1a;软件设计模式 2.1 开闭原则 &#xff08;1&#xff09;定义 在程序需要进行拓展的时候&#xff0c;不能修改原有代码 使用到接口和抽象类&#x…

阿里qiankun微服务搭建

主服务 chat vue3 ts vite 子服务 ppt react 18 vite 子服务 agent 主服务 npm i vite-plugin-qiankun mian.ts import ./style/base.scss import virtual:svg-icons-register import { createApp } from vue import { createPinia } from piniaimport App from ./App.vue im…

安装WSL2,配置Ubuntu图像化界面

目录 一、前言二、安装WSL三、安装图像化界面四、参考 一、前言 Windows 子系统下的 Linux 子系统&#xff08;WSL&#xff0c;Windows Subsystem for Linux&#xff09;是微软推出的一项功能&#xff0c;允许用户在 Windows 系统中原生运行 Linux 环境&#xff0c;无需安装虚…