Android全新UI编程 - Jetpack Compose 超详细教程

作者:HyejeanMOON
链接:https://juejin.im/post/6858515425706115085

1. 简介

Jetpack Compose是谷歌在2019Google i/o大会上发布的新的库。可以用更少更直观的代码创建View,还有更强大的功能,以及还能提高开发速度。

第一篇文章在这里:
Android全新UI编程 - Jetpack Compose 超详细教程 第1弹

实在抱歉,最近忙着换工作,让大家久等了。

上一篇我们讲了关于@Compose方法,@Preview*ThemeModifier等的使用方法,
这一篇我会介绍关于TextImageButtonSpacer组件的使用。
好了,咱开始吧。

2. 教程

2.1 Text

2.1.1 可设置参数

Text就是之前一直使用的TextViewText也是@Compose注解的方法,所以也需要在@Compose方法中调用。可设置的常用参数如下。

  • text : String:
    设置所需要显示的文字。

  • modifier : Modifier:
    设置关于Text位置信息的Modifier。关于Modifier的使用方法查看第一篇。

  • color : Color:
    默认是Color.Unset。可以创建Color对象,Color(0xFF000000)。也可以直接使用默认已预置的颜色,如Color.Black

  • fontSize : TextUnit:
    设置文字的大小,默认是TextUnit.Inherit,可以用TextUnit.Sp(10)方式设置。

  • fontStyle : FontStyle:
    设置字体类型,默认是null。可以设置正常字体FontSytle.Normal和斜体FontStyle.Italic

  • letterSpacing : TextUnit:
    设置字符间距,默认是TextUnit.Inherit,可以用TextUnit.Sp(10)方式设置。

  • textDecoration : TextDecoration:
    设置删除线和下划线,默认是null。删除线TextDecoration.LineThrough,下划线TextDecoration.UnderLine,没有任何装饰TextDecoration.None

  • textAlign : TextAlign:
    设置文本对齐方式,默认是null。左对齐TextAlign.Left,右对齐TextAlign.Right,中间对齐TextAlign.Center,拉伸填充整个容器TextAlign.Justify,还有TextAlign.StartTextAlign.End就不解释了。

  • style : TextStyle :
    设置TextStyle,默认是currentTextStyle()。关于TextStyle以后再讲。

  • maxLine : :Int:
    设置Text最大行数,默认是Int.MAX_VALUE

  • onTextLayout : (TextLayoutResult) -> Unit:
    设置一个回调,当新的Text Layout已经被计算出来,就会执行这个回调。

2.1.2 示例

            Text(
                text = "Hello $name!",
                modifier = Modifier.padding(10.dp).gravity(Alignment.CenterVertically),
                color = Color.Blue,
                textAlign = TextAlign.End,
                textDecoration = TextDecoration.LineThrough,
                onTextLayout = {},
                fontStyle = FontStyle.Italic,
                maxLines = 1
            )
复制代码

<figcaption></figcaption>

2.2 Button

2.2.1 可设置参数

Buton就是之前一直使用的ButtonViewButtom也是@Compose注解的方法。常用的设置参数如下。

  • onClick : () -> Unit:
    当按钮被点击时,会被调用。

  • modifier : Modifier:
    设置关于Text位置信息的Modifier。关于Modifier的使用方法查看第一篇。

  • enabled : Boolean:
    设置按钮的有效性,默认是true

  • elevation : Dp:
    调整按钮在Z轴方向上的高度,默认是2.dp

  • disabledElevation : Dp:
    调整按钮无效时在Z轴方向上的高度,默认是0.dp

  • shape : Shape:
    调整按钮的样子,默认是MaterialTheme.shapes.small。可设置的样子如下。
    RoundedCornerShape: 设置圆角矩形的样式,下图是RoundedCornerShape(30)时的样子。

CircleShape: 可设置圆形的样式,它是系统为我们提前预设的RoundedCornerShape(50)时的特殊样子。

CutCornerShape: 可设置切角样式,下图是CutCornerShape(30)是的样子。

  • border : Border:
    设置按钮的外边框,默认是null
    Border的构造器一共有两种,一种是Border(size: Dp, color: Color),另一种是Border(size: Dp, brush: Brush)
    在这里只介绍第一种,第二种的主要用途是自己创建一个笔刷,去绘制外边框。比如想实现渐变色的外边框的时候就可以使用第二种方法。
    Border(3.dp, Color.Blue)的样子如下。

  • backgroundColor : Color:
    设置按钮的背景颜色,默认是MaterialTheme.colors.primary

  • disabledBackgroundColor : Color:
    设置当按钮无效时的背景颜色,默认是Button.defaultDisabledBackgroundColor

  • contentColor : Color:
    设置按钮的内容颜色,上面一系列的示例图中有黄色Android字就是因为设置了contentColor为黄色。

  • disabledContentColor : Color:
    设置当按钮无效时的内容颜色。

  • padding : InnerPadding:
    设置按钮的InnerPadding, 使用方法如下。
    padding = InnerPadding(start = 1.dp, top = 2.dp, end = 3.dp, bottom = 4.dp)

  • text : @Composable () -> Unit:
    设置Button内的布局,需要传入@Compose方法。

2.2.2 示例

            Button(
                text = { Text(text = name) },
                onClick = {},
                modifier = Modifier.padding(12.dp),
                backgroundColor = Color.Green,
                contentColor = Color.Yellow,
                elevation = 10.dp,
                border = Border(2.dp, Color.Red)
            )
复制代码

2.2.3 OutlinedButton

OutlinedButton是特殊的Button, 是有外边框的按钮。设置方法跟上述一致。

2.2.4 TextButton

TextButton是特殊的Button, 是有外边框的按钮。设置方法跟上述一致。

2.3 Image

2.3.1 可设置参数

Image就是之前一直使用的ImageViewImage也是@Compose注解的方法。常用的设置参数如下。

  • asset : VectorAsset
    需要传入用来显示图片的VetorAsset。也可以传入库本本身自带的Icon,Icons.Filled.Home

  • modifier : Modifier
    设置关于Text位置信息的Modifier。关于Modifier的使用方法查看第一篇。

  • aligment : Aligment
    需传入Alignment.Vertical,为Column传入Alignment.Horizontal

  • contentScale : ContentScale
    这里是需要设置图片的显示模式,默认是ContentScale.Inside。详细介绍如下。
    ContentScale.Inside:
    如果图片大于设置的图片显示区域,则会按比例缩小,如果是小于则不进行任何操作。
    ContentScale.Crop:
    保持长宽比的情况下,按比例缩小或放大使图片大于等于图片的显示区域,使显示区域全部显示图片。
    ContentScale.Fit:
    保持长宽比的情况下,按比例缩小或放大使图片小于等于图片的显示区域。
    ContentScale.FillHeight:
    保持长宽比的情况下,使图片的高度等于图片显示区域的高度。
    ContentScale.FillWidth:
    保持长宽比的情况下,使图片的长度等于图片显示区域的长度。

  • alpha : Float
    设置透明度,默认是1.0f

  • colorFilter : ColorFilter
    可以设置颜色滤镜,这里就不具体展开了。

除了第一参数asset : VectorAsset以外,作为代替还可以设置ImageAsset或者Painter。 要传入VectorAsset对象时可以使用vectorResource(resoureceId)方法来传入文件。
同理,要传入ImageAsset对象时可以使用imageResource(resoureceId)方法来传入文件。 Painter就不展开介绍了。

2.3.2 示例

Image(
    asset = vectorResource(id = R.drawable.ic_mllogosvg), 
    modifier = Modifier.ltr.padding(10.dp),
    alignment = Alignment.Center
    )
复制代码

2.4 Spacer

Spacer就是之前一直使用的SpaceSpacer也是@Compose注解的方法。需要显示空白区域时,可以使用Spacer

2.4.1 可设置参数

  • modifier : Modifier
    设置关于Text位置信息的Modifier。关于Modifier的使用方法查看第一篇。

2.4.2 示例

Spacer(Modifier.preferredWidth(16.dp))
复制代码

最后

整理了一份《compose 完全开发手册》详细文档可以点我下载,记得点赞哦~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,376评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,126评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,966评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,432评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,519评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,792评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,933评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,701评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,143评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,488评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,626评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,292评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,896评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,742评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,324评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,494评论 2 348