返回顶部
首页 > 资讯 > 移动开发 >Jetpack Compose Text的基本使用
  • 731
分享到

Jetpack Compose Text的基本使用

2024-04-02 19:04:59 731人浏览 独家记忆
摘要

目录Text基本使用富文本显示文字部分可选可点击文字TextFieldBasicTextFieldText 文字是任何界面必须的元素,Compose Text 可组合项,通过设置文字

Text

文字是任何界面必须的元素,Compose Text 可组合项,通过设置文字、大小、颜色可以实现各种文字效果。

Text的基本用法如下:

@Composable
fun Text(
    //要显示的文字
    text: String,
    //修饰符
    modifier: Modifier = Modifier,
    //文字颜色
    color: Color = Color.Unspecified,
    //文字大小
    fontSize: TextUnit = TextUnit.Unspecified,
    //文字样式,正常或者斜体
    fontStyle: FontStyle? = null,
    //字重,范围:1~1000之间
    fontWeight: FontWeight? = null,
    //字体
    fontFamily: FontFamily? = null,
    //字幕之间间距
    letterSpacing: TextUnit = TextUnit.Unspecified,
    //文字装饰,下划线、中划线或者None
    textDecoration: TextDecoration? = null,
    //文字对齐方式
    textAlign: TextAlign? = null,
    //行高
    lineHeight: TextUnit = TextUnit.Unspecified,
    //溢出处理方式,裁剪、省略号或者正常显示
    overflow: TextOverflow = TextOverflow.Clip,
    //是否处理换行符
    softWrap: Boolean = true,
    //最大行数
    maxLines: Int = Int.MAX_VALUE,
    //计算文本布局时的回调
    onTextLayout: (TextLayoutResult) -> Unit = {},
    //文本样式,颜色、字体等
    style: TextStyle = LocalTextStyle.current
)

基本使用

@Composable
fun TextCommon() {
    Text(
        "Hello World",
        color = Color.Blue,
        fontSize = 30.sp,
        fontWeight = FontWeight.Bold,
        textAlign = TextAlign.Center,
        modifier = Modifier
            .width(150.dp)
            .background(Color(0xff44D1FD)),
        fontFamily = FontFamily.SansSerif,
        fontStyle = FontStyle.Italic,
        textDecoration = TextDecoration.LineThrough,
        style = TextStyle.Default
    )
}

通过简单设置字体颜色文字大小 等就能满足我们的基本要求。

效果如下:

富文本显示

如果需要显示不同的文字样式,就必须用到 AnnotatedString,通过 buildAnnotatedString()可以实现各种富文本的显示。

@Composable
fun RichText() {
   Text(
       buildAnnotatedString {
           withStyle(style = SpanStyle(color = Color.Blue)) {
               append("H")
           }
           append("ello ")
           withStyle(style = SpanStyle(fontWeight = FontWeight.Bold, color = Color.Red)) {
               append("W")
           }
           append("orld")
           withStyle(style = ParagraphStyle(lineHeight = 30.sp)) {
               withStyle(style = SpanStyle(color = Color.Blue)) {
                   append("Hello\n")
               }
               withStyle(
                   style = SpanStyle(
                       fontWeight = FontWeight.Bold,
                       color = Color.Red
                   )
               ) {
                   append("World\n")
               }
               append("Compose")
           }
       }, modifier = Modifier.padding(start = 10.dp).background(Color(0xff44D1FD))
   )
}

通过buildAnnotatedString() + withStyle() 设置不同位置的,显示不同效果。

效果如下:

闪屏

文字部分可选

@Composable
fun PartiallySelectableText() {
    SelectionContainer {
        Column(modifier = Modifier.padding(start = 10.dp).background(Color(0xff44D1FD))) {
            Text("This text is selectable")
            Text("This one too")
            Text("This one as well")
            DisableSelection {
                Text("But not this one")
                Text("Neither this one")
            }
            Text("But again, you can select this one")
            Text("And this one too")
        }
    }
}

默认情况下,Compose可组合项不可以选择,要启用选择,需要使用SelectionContainer包裹文字组合。你也可以选择在部分区域禁止选择,DisableSelection包裹文字部分就可以实现部分不可选。效果如下:

闪屏

可点击文字

@Composable
fun AnnotatedClickableText() {
    val context = LocalContext.current
    val annotatedText = buildAnnotatedString {
        append("Click ")
        pushStringAnnotation(tag = "URL", annotation = "https://developer.Android.com")
        withStyle(style = SpanStyle(color = Color.Blue, fontWeight = FontWeight.Bold)) {
            append("here")
        }
        pop()
    }
    ClickableText(
        modifier = Modifier.padding(start = 10.dp).background(Color(0xff44D1FD)),
        text = annotatedText,
        onClick = { offset ->
            annotatedText.getStringAnnotations(tag = "URL", start = offset, end = offset)
                .firstOrNull()?.let { annotation ->
                    // If yes, we log its value
                    Log.d("Clicked URL", annotation.item)
                    val uri = Uri.parse(annotation.item)
                    val intent = Intent(Intent.ACTION_VIEW, uri)
                    context.startActivity(intent)
                }
        }
    )
}

通过pushStringAnnotation() 设置tag,然后在ClickableText 的onClick 回调处理点击事件。效果如下:

闪屏

TextField

TextField 允许用户输入文字,TextField 是 BasicTextField 的简单封装,包含了各种装饰。

@Composable
fun SimpleFilledTextField() {

    var text by remember { mutableStateOf("Hello") }

    TextField(
        value = text,
        onValueChange = { text = it },
        label = { Text("Label") },
        placeholder = { Text("placeholder") },
        leadingIcon = { Text("leadingIcon") },
        trailingIcon = { Text("trailingIcon") },
        isError = true,
        modifier = Modifier
            .padding(start = 10.dp, end = 10.dp)
            .fillMaxWidth(),
        maxLines = 10,
        singleLine = false,
        keyboardActions = KeyboardActions(
            onDone = {

            },
            onNext = {

            },
            onPrevious = {

            },
            onSearch = {

            },
            onSend = {

            },
            onGo = {

            }
        ),
        keyboardOptions = KeyboardOptions(
            capitalization = KeyboardCapitalization.Characters,
            autoCorrect = true,
            keyboardType = KeyboardType.Number,
            imeAction = ImeAction.Search
        ),
        readOnly = false
    )

}

闪屏

BasicTextField

@Composable
fun Search() {
    var key by remember {
        mutableStateOf("")
    }
    Box(modifier = Modifier.padding(end = 35.dp)) {
        Row(
            modifier = Modifier
                .padding(top = 10.dp, bottom = 10.dp)
                .fillMaxSize()
                .clip(CircleShape)
                .background(Color.White),
            verticalAlignment = Alignment.CenterVertically
        ) {
            Icon(
                painter = painterResource(id = com.zjp.common.R.drawable.search),
                contentDescription = "search", tint = Color.Gray,
                modifier = Modifier.padding(start = 10.dp)
            )
            BasicTextField(
                value = key,
                onValueChange = {
                   key = it
                },
                modifier = Modifier
                    .fillMaxWidth()
                    .padding(start = 10.dp, end = 30.dp)
                    .align(Alignment.CenterVertically),
                textStyle = TextStyle(
                    textAlign = TextAlign.Justify,
                    fontSize = 20.sp,
                    color = Color.Black.copy(alpha = 0.8f)
                ),
                singleLine = true,
                cursorBrush = SolidColor(Color.Red),
                keyboardActions = KeyboardActions(
                    onSearch = {

                    }
                ),
                keyboardOptions = KeyboardOptions(
                    imeAction = ImeAction.Search
                ),
                decorationBox = { innerTextField ->
                    Box() {
                        if (key.isEmpty()) {
                            Text("搜点啥", color = Color.Gray, fontSize = 20.sp)
                        }
                        innerTextField()  //<-- Add this
                    }
                }
            )
        }
        if (key.isNotEmpty()) {
            Icon(
                painter = painterResource(id = android.R.drawable.ic_menu_close_clear_cancel),
                contentDescription = "close",
                modifier = Modifier
                    .align(Alignment.CenterEnd)
                    .padding(end = 10.dp)
                    .clickable { key = "" },
                tint = Color.Gray
            )
        }
    }
}

与TextField 相比,BasicTextField 没有 leadingIcon、placeholder、trailingIcon 等装饰,你可以通过配合其他科组合项,实现不同的效果。

简单搜索框效果如下:

闪屏

到此这篇关于Jetpack Compose Text的基本使用的文章就介绍到这了,更多相关Jetpack Compose Text 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Jetpack Compose Text的基本使用

本文链接: https://lsjlt.com/news/168745.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Jetpack Compose Text的基本使用
    目录Text基本使用富文本显示文字部分可选可点击文字TextFieldBasicTextFieldText 文字是任何界面必须的元素,Compose Text 可组合项,通过设置文字...
    99+
    2024-04-02
  • Android Jetpack Compose之RadioGroup的使用
    Android Jetpack Compose是一个现代化的UI工具包,帮助开发者以声明式的方式构建出美观且功能强大的Android应用。在本文中,我们将详细介绍其中的一个重要组件——RadioGroup。 一. RadioGroup简介...
    99+
    2023-10-23
    android android jetpack
  • Jetpack Compose 的新型架构 MVI使用详解
    目录为什么是MVI而不是MVVM单向数据流MVI实现使用界面ViewModel优化为什么是MVI而不是MVVM MVVM作为流行的架构模式,应用在 Compose上,并没有大的问题或...
    99+
    2024-04-02
  • Android Jetpack组件Navigation导航组件的基本使用
    目录1.Navigation 基本概念2.Navigation 使用入门2.1 添加Navigation依赖2.2 创建导航图2.3 导航图中添加目的地Fragment2.4 Act...
    99+
    2024-04-02
  • Docker compose搭建ELK服务基本使用
    目录概述docker-compose 基本使用最后概述 使用的是docker-compose方法安装elk组件,对这部分的内容进行一个知识上的补充,使用docker-compose...
    99+
    2023-03-23
    Docker compose搭建ELK Docker compose
  • Android Jetpack组件ViewModel基本用法详解
    目录引言一、概述与作用二、基本用法小结引言 天道好轮回,终于星期五,但是还是忙碌了一天。在项目中,我遇到了一个问题,起因则是无法实时去获取信息来更新UI界面,因为我需要知道我是否获...
    99+
    2023-01-30
    Android Jetpack组件ViewModel Android Jetpack
  • 如何用Jetpack Compose绘制可爱的天气动画
    这篇文章主要介绍了如何用Jetpack Compose绘制可爱的天气动画的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何用Jetpack Compose绘制可爱的天气动画文章都会有所收获,...
    99+
    2023-06-26
  • Jetpack之CameraX的使用
    目录引入依赖预览拍摄引入依赖 下面,就使用该库来打造一个简单的相机应用吧~ 首先引入依赖     def camerax_version = "1.1....
    99+
    2022-11-13
    Jetpack CameraX Android CameraX
  • Docker Compose部署及基础使用的方法
    本篇内容主要讲解“Docker Compose部署及基础使用的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Docker Compose部署及基础使用的方法...
    99+
    2024-04-02
  • Android Jetpack中Room的使用
    Room Room主要分三个部分 database、dao和实体类entity Entity entity实体类定义时需要用到@Entity(tableName = "student...
    99+
    2024-04-02
  • Postgresql的基本使用
    Windows 下服务检查首页查看服务是否运行查找postgresql服务服务正在运行执行命令 命令行管理打开cmd命令行连接数据库命令接入PostgreSQL数据库: psql -h IP地址 -p 端...
    99+
    2024-04-02
  • MySQL的基本使用
    目录 1、数据库基础 2、MySQL数据库的使用 3、数据库基本操作 4、常用函数 5、MySQL自带库 1、数据库基础 数据(Data):图像、语音、文字等 在计算机系统中,各种字母、数字符号的组合、语音、图形、图像等统称为数据。 ...
    99+
    2023-10-06
    网络安全 web安全 安全 mysql
  • EasyExcel 的基本使用
    EasyExcel EasyExcel 是一个基于 Java 的简单、省内存的读写 Excel 的开源项目。在尽可能节约内存的情况下支持读写百 M 的 Excel。 官网:https://easye...
    99+
    2023-09-12
    java excel spring boot
  • csv.reader的基本使用
    一、简单介绍 csv.reader(file, delimiter='\t'),其中 delimiter 代表分隔符,通常根据数据集中相邻元素之间的分隔方式来设定,函数默认每行数据的元素间是以逗号分隔(也可以设置为'\t')。 csv.re...
    99+
    2023-09-03
    python 数据挖掘
  • Linux的基本使用
    🐧🐧🐧Linux作为一个开源的操作系统,其在服务器上,PC上,嵌入式设备上都是很好的操作系统,而大部分的公司也都在使用Linux操作系统,那么就让我...
    99+
    2023-09-04
    linux 服务器
  • nacos的基本使用
    1、nacos的安装 1、首先要使用nacos那肯定得先下载nacos nacos的GitHub下载地址 2、解压并且放到自己想放的目录,打开bin目录下的startup.cmd(windows下)...
    99+
    2023-10-25
    spring cloud java spring boot
  • PyCharm的基本使用
    PyCharm是我一直在使用的python编辑器,今天具体讲一下PyCharm的使用。下载首先是下载PyCharm,PyCharm的下载地址:https://www.jetbrains.com/pycharm/这个是一个商业软件,大家可以选...
    99+
    2023-06-02
  • 使用docker-compose 部署 MySQL(所有版本通用)
    目录 一、拉取MySQL镜像二、创建挂载目录三、添加配置文件my.cnf (没有特殊需求可以跳过)四、编写 docker-compose.yml 文件五、启动容器六、运行后查看启动容器的情况七...
    99+
    2023-10-22
    docker 容器 mysql 数据库 运维
  • 【uni-app】rich-text的使用
    rich-text的使用 rict-text可以支持部分HTML节点及属性 rict-text的属性如下: nodes 值为 HTML String 时,在组件内部将自动解析为节点列表,推荐直接使用...
    99+
    2023-08-31
    uni-app 微信小程序 前端 小程序
  • android的RecylerView基本使用
    文章目录一、RecylerView基本使用1. 添加依赖2. 添加布局3. 添加adapter4. 添加item_recycler.xml5. ...
    99+
    2022-06-06
    Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作