热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JetpackCompose自定义搜索框

效果代码***@paramhint:空字符时的提示*@paramstartIcon:左侧图标;-1则不显示*@paramiconSpacing:左侧图标与文字的距离;相当于:dra

效果

image


代码

/**
* @param hint: 空字符时的提示
* @param startIcon: 左侧图标; -1 则不显示
* @param iconSpacing: 左侧图标与文字的距离; 相当于: drawablePadding
*/
@Composable
fun CustomEdit(
text: String = "",
onValueChange: (String) -> Unit,
modifier: Modifier,
hint: String = "请输入",
@DrawableRes startIcon: Int = -1,
iconSpacing: Dp = 6.dp,
enabled: Boolean = true,
readOnly: Boolean = false,
textStyle: TextStyle = TextStyle.Default,
keyboardOptions: KeyboardOptiOns= KeyboardOptions.Default,
keyboardActions: KeyboardActiOns= KeyboardActions.Default,
visualTransformation: VisualTransformation = VisualTransformation.None,
cursorBrush: Brush = SolidColor(MaterialTheme.colorScheme.primary)
) {
// 焦点, 用于控制是否显示 右侧叉号
var hasFocus by remember { mutableStateOf(false) }
BasicTextField(
value = text,
OnValueChange= onValueChange,
modifier = modifier.onFocusChanged { hasFocus = it.isFocused },
singleLine = true,
enabled = enabled,
readOnly= readOnly,
textStyle = textStyle,
keyboardOptiOns= keyboardOptions,
keyboardActiOns= keyboardActions,
visualTransformation = visualTransformation,
cursorBrush = cursorBrush,
decoratiOnBox= @Composable { innerTextField ->
Row(
modifier = Modifier.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically
) {
// -1 不显示 左侧Icon
if (startIcon != -1) {
Image(painter = painterResource(id = startIcon), cOntentDescription= null)
Spacer(modifier = Modifier.width(iconSpacing))
}
Box(modifier = Modifier.weight(1f)) {
// 当空字符时, 显示hint
if (text.isEmpty())
Text(text = hint, color = Color.Gray, style = textStyle)
// 原本输入框的内容
innerTextField()
}
// 存在焦点 且 有输入内容时. 显示叉号
if (hasFocus && text.isNotEmpty()) {
Icon(imageVector = Icons.Filled.Clear, // 清除图标
cOntentDescription= null,
// 点击就清空text
modifier = Modifier.clickable { onValueChange.invoke("") })
}
Icon(
imageVector = Icons.Filled.Search,
cOntentDescription= null,
modifier = Modifier
.padding(start = 10.dp)
)
}
}
)
}

使用

CustomEdit(
text = searchText,
OnValueChange= {
searchText = it
},
hint = "搜索应用",
modifier = Modifier
.fillMaxWidth()
.padding(start = 16.dp, top = 0.dp, end = 16.dp, bottom = 10.dp)
.height(50.dp)
.background(Color(0xBCE9E9E9), shape = MaterialTheme.shapes.medium)
.padding(horizOntal= 16.dp),
textStyle = Typography.bodyMedium,
keyboardOptiOns= KeyboardOptions(keyboardType = KeyboardType.Text),
)


推荐阅读
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • VSCode快速查看函数定义和代码追踪方法详解
    本文详细介绍了在VSCode中快速查看函数定义和代码追踪的方法,包括跳转到定义位置的三种方式和返回跳转前的位置的快捷键。同时,还介绍了代码追踪插件的使用以及对符号跳转的不足之处。文章指出,直接跳转到定义和实现的位置对于程序员来说非常重要,但需要语言本身的支持。以TypeScript为例,按下F12即可跳转到函数的定义处。 ... [详细]
  • Python脚本编写创建输出数据库并添加模型和场数据的方法
    本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
  • Introduction(简介)Forbeingapowerfulobject-orientedprogramminglanguage,Cisuseda ... [详细]
  • vb.net不用多线程如何同时运行两个过程?不用多线程?即使用多线程,也不会是“同时”执行,题主只要略懂一些计算机编译原理就能明白了。不用多线程更不可能让两个过程同步执行了。不过可 ... [详细]
  • 电脑f5键是什么作用
    常见问题f5常见问题韩亚整形医院源码,vscode写前端代码,ubuntu低配,tomcat下载路径乱码,爬虫_gscu,php精粹pdf,广州快速seo优化排名,aspwap网站 ... [详细]
  • 我正在尝试将Firebase添加到涉及添加以下内容的现有应用程序中:classpath'com.googl ... [详细]
  • Flutter第六章(BottomNavigationBar ,AppBar,TabBar ,TabController 以及案例)
    版权声明:本文为作者原创书籍。转载请注明作者和出处,未经授权,严禁私自转载,侵权必究!!!情感语录:如果你想得到从未拥有过的东西,那么你必须去做从未做过的事 ... [详细]
  • 开发笔记:小白python机器学习之路——支持向量机
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了小白python机器学习之路——支持向量机相关的知识,希望对你有一定的参考价值。支持 ... [详细]
  • Linux上的文件类型与默认图标
    linux,上,的,文件 ... [详细]
  • 记录一些 Latex 的技巧
    Latex一些技巧:1.如何创建不浮动的的figure和table\makeatletter\newcommand{\figcaption}{\def\captyp ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 十一、jqPlot饼图和圆环图Abstract饼图和圆环图是将数据分解成各个组成 ... [详细]
author-avatar
mobiledu2502899727
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有