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 内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

Jetpack Compose Text的基本使用的更多相关文章

  1. 一文详解 Compose Navigation 的实现原理

    这篇文章主要介绍了一文详解 Compose Navigation的实现原理,文章通告围绕主题展开详细的相关内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

  2. 使用Compose制作抖音快手视频进度条Loading动画效果

    这篇文章主要为大家介绍了使用Compose制作抖音快手视频进度条Loading动画效果,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  3. 利用Jetpack Compose实现绘制五角星效果

    这篇文章主要为大家介绍了Jetpack Compose如何使用自定义操作符实现绘制五角星效果,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下

  4. Android Jetpack 狠活Lifecycles与LiveData使用详解

    这篇文章主要为大家介绍了Android Jetpack 狠活Lifecycles与LiveData使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  5. Android开发Jetpack组件Lifecycle使用篇

    这一篇文章来介绍Android Jetpack架构组件的Lifecycle; Lifecycle用于帮助开发者管理Activity和Fragment 的生命周期, 由于Lifecycle是LiveData和ViewModel的基础;所以需要先学习它

  6. Android Compose自定义TextField实现自定义的输入框

    众所周知Compose中默认的TextField和OutlineTextField样式并不能满足所有的使用场景,所以自定义TextField就成了必备技能。本文将自定义TextField实现自定义的输入框,感兴趣的可以了解一下

  7. 解决Android Studio XML编辑界面不显示下面的Text和Design选项卡

    这篇文章主要介绍了解决Android Studio XML编辑界面不显示下面的Text和Design选项卡,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  8. 一文搞懂Python读取text,CSV,JSON文件的方法

    文件处理是一种用于创建文件、写入数据和从中读取数据的过程,Python 拥有丰富的用于处理不同文件类型的包,从而使得我们可以更加轻松方便的完成文件处理的工作,本文将来为大家详细讲讲

  9. Android开发Compose remember原理解析

    这篇文章主要为大家介绍了Android开发Compose remember原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. koa中间件核心(koa-compose)源码解读分析

    这篇文章主要介绍了koa中间件核心(koa-compose)源码解读分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

随机推荐

  1. Flutter 网络请求框架封装详解

    这篇文章主要介绍了Flutter 网络请求框架封装详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. Android单选按钮RadioButton的使用详解

    今天小编就为大家分享一篇关于Android单选按钮RadioButton的使用详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

  3. 解决android studio 打包发现generate signed apk 消失不见问题

    这篇文章主要介绍了解决android studio 打包发现generate signed apk 消失不见问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  4. Android 实现自定义圆形listview功能的实例代码

    这篇文章主要介绍了Android 实现自定义圆形listview功能的实例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  5. 详解Android studio 动态fragment的用法

    这篇文章主要介绍了Android studio 动态fragment的用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. Android用RecyclerView实现图标拖拽排序以及增删管理

    这篇文章主要介绍了Android用RecyclerView实现图标拖拽排序以及增删管理的方法,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下

  7. Android notifyDataSetChanged() 动态更新ListView案例详解

    这篇文章主要介绍了Android notifyDataSetChanged() 动态更新ListView案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

  8. Android自定义View实现弹幕效果

    这篇文章主要为大家详细介绍了Android自定义View实现弹幕效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  9. Android自定义View实现跟随手指移动

    这篇文章主要为大家详细介绍了Android自定义View实现跟随手指移动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. Android实现多点触摸操作

    这篇文章主要介绍了Android实现多点触摸操作,实现图片的放大、缩小和旋转等处理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部