Jetpack Compose 从入门到入门(三)

2023-05-16

本篇开始介绍Jetpack Compose 中的修饰符Modifier。修饰符可以用来执行以下操作:

  • 更改可组合项的大小、布局、行为和外观。
  • 添加信息,如无障碍标签。
  • 处理用户输入。
  • 添加高级互动,如使元素可点击、可滚动、可拖动或可缩放。

1.常用修饰符

下面先介绍一些常用的方法:

  • alpha(alpha: Float):设置透明度,范围0到1。
  • background(color: Color, shape: Shape?):设置背景色,shape可以指定形状,例如可以使用RoundedCornerShape来指定圆角大小。
  • 对于背景是渐变的,可以使用background(brush: Brush, shape: Shape?, alpha: Float?)。其中Brush就是我们指定渐变,例如使用horizontalGradient创建水平方向渐变:
	Box(Modifier.background(
        Brush.horizontalGradient(
            listOf(Color.Red, Color.Green)
        )
    ).size(100.dp))

在这里插入图片描述
当然,还可以指定开始结束的位置,颜色的分散偏移量,这里就不多说了。

  • Modifier.border(width: Dp, color: Color, shape: Shape?),添加边框,可以指定颜色、粗细和形状。
  • Modifier.clickable(),添加点击事件。参数如下:
Modifier.clickable(
    enabled: Boolean = true, // 是否可点击状态,默认可点击
    onClickLabel: String? = null, // 语义/可访问性标签
    role: Role? = null, // 点击元素的类型,例如Button、Checkbox、Image等。用于可访问性服务。
    onClick: () -> Unit // 点击事件
)

如果不考虑Android TalkBack 读屏这类功能,一般情况下使用就是Modifier.clickable { }

  • Modifier.combinedClickable()与上面的点击事件一样,只是它还支持长按,双击事件。
  • Modifier.onFocusChanged(),监听焦点变化事件。
  • Modifier.focusable(),设置焦点。
  • Modifier.height(height: Dp),设置高度,同理width设置宽度。
  • Modifier.requiredHeight(height: Dp),强制设置高度,可以忽略父元素的宽高限制。requiredWidth同理。举一个小例子:
	Box(Modifier.requiredSize(100.dp)
        .background(Color.Red)
    ) {
        Box(Modifier.width(50.dp)
            .height(150.dp)
            .background(Color.Blue)
        )
    }
    

一个100dp100dp的红色方块内有个50dp150dp的蓝色方块。如果我们把height换为requiredHeight

	Box(Modifier.requiredSize(100.dp)
        .background(Color.Red)
    ) {
        Box(Modifier.width(50.dp)
            .requiredHeight(150.dp)
            .background(Color.Blue)
        )
    }

对比一下前后效果,一目了然。

在这里插入图片描述

  • Modifier.heightIn(min: Dp, max: Dp ),设置高度的最大最小值。widthIn同理。
  • Modifier.size(size: Dp),可同时设置宽高。requiredSizesizeIn与上面的同理。
  • Modifier.padding(all: Dp),元素的边添加间隔,也就是常说的内间距。
  • Modifier.rotate(degrees: Float),设置旋转度数。
  • Modifier.scale(scaleX: Float, scaleY: Float),设置缩放,如果是负数可以实现镜像效果。
  • Modifier.horizontalScroll(),允许子元素在宽度大于最大限制时垂直滚动。例如我们给Row添加它,这样在超出屏幕宽度后,我们就可以水平方向滚动了。verticalScroll同理。
	Row(Modifier.horizontalScroll(rememberScrollState())) {
		Box(
			Modifier.size(5000.dp, 100.dp)
       			.background(Color.Blue)
    	)
	}
  • Modifier.fillMaxHeight(fraction: Float = 1f),高度上填充满父元素,参数fraction指填充的比例。fillMaxWidthfillMaxSize同理。示例:
	Box(Modifier.requiredSize(100.dp).background(Color.Blue)) {
        Box(
            Modifier.fillMaxWidth(0.8f)
                .fillMaxHeight(0.5f)
                .background(color = Color.Yellow)
        )
    }

效果如下:
在这里插入图片描述

  • Modifier.wrapContentSize(align: Alignment?, unbounded: Boolean?),看这个名字,相信你就会联想起wrap_content,它允许内容以其所需的大小进行测量,会忽略最小宽度或最小高度的约束。如果unbounded为true,也会忽略最大宽高的约束,默认为false。align是指定子元素相对父元素的对齐方式,默认居中。

看个例子:

	Box(Modifier.requiredSize(200.dp).background(Color.Blue)) {
        Box(
            Modifier.sizeIn(minWidth = 140.dp, minHeight = 140.dp)
                .wrapContentSize(Alignment.TopStart)
                .size(70.dp)
                .background(Color.Yellow)
        )
    }

外层是个200dp*200dp的蓝色方块,内部是最小宽高140dp的黄色方块。由于设置了wrapContentSize,此时size(70.dp)就生效了,成为了70dp的黄色方块。下图是使用wrapContentSize前后的对比图。

在这里插入图片描述
同样的例子,我们看一下unbounded属性的作用。外层是个200dp*200dp的蓝色方块,内部是最大宽高140dp的黄色方块。现在我们设置size为170dp

	Box(Modifier.requiredSize(200.dp).background(Color.Blue)) {
        Box(
            Modifier.sizeIn(maxWidth = 140.dp, maxHeight = 140.dp)
                .wrapContentSize(Alignment.TopStart, true)
                .size(170.dp)
                .background(Color.Yellow)
        )
    }

下图分别是unbounded为true和false的效果图:
在这里插入图片描述

2.修饰符顺序

修饰符函数的顺序非常重要。每个函数都会对上一个函数返回的 Modifier 进行更改。

上面介绍了一些常用的修饰符,不知道你有没有注意到,有提到padding,为啥没见margin?其实就是因为修饰符的顺序,不同的顺序会实现paddingmargin效果。这块我就直接照搬文档的例子了,很直观。

@Composable
fun ArtistCard(/*...*/) {
    val padding = 16.dp
    Column(
        Modifier
            .clickable(onClick = onClick)
            .padding(padding)
            .fillMaxWidth()
    ) {
        // rest of the implementation
    }
}

clickablepadding

在这里插入图片描述
可以看到点击范围就是整个卡片,然后卡片的内容四周有16dp的间隔,实现的效果就是padding

如果先paddingclickable

@Composable
fun ArtistCard(/*...*/) {
    val padding = 16.dp
    Column(
        Modifier
            .padding(padding)
            .clickable(onClick = onClick)
            .fillMaxWidth()
    ) {
        // rest of the implementation
    }
}

效果如下:
在这里插入图片描述
可以看到效果就是margin

再举一个例子,就是我们上面说到的wrapContentSize。注意我们当时的使用顺序:

	Box(Modifier.requiredSize(200.dp).background(Color.Blue)) {
        Box(
            Modifier.sizeIn(minWidth = 140.dp, minHeight = 140.dp)
                .wrapContentSize(Alignment.TopStart)
                .size(70.dp)
                .background(Color.Yellow)
        )
    }

如果wrapContentSizesize顺序反过来,那就不会显示黄色的方块了,因为首先它忽略了之前设置的最小宽高,然后内容大小后面没有设置了,所以就看不到了。记住开始的那句话,每个修饰符函数都会对上一个函数返回的 Modifier 进行更改。

所以在实际的使用中,不仅需要了解修饰符的作用,同样需要注意修饰符的顺序。


那么到这里有关修饰符的部分就完了,下一篇就是常用组件的介绍。如果本篇对你有帮助,希望点个赞支持一下~

参考:

  • 官方文档 - 修饰符
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jetpack Compose 从入门到入门(三) 的相关文章

  • Jetpack Compose 从入门到入门(九)

    本篇是Compose的手势部分 点击 添加clickable修饰符就可以轻松实现元素的点击 此外它还提供无障碍功能 xff0c 并在点按时显示水波纹效果 span class token annotation builtin 64 Comp
  • docker-compose搭建lnmp环境

    使用命令创建文件和文件夹 span class token function mkdir span p span class token punctuation span php nginx span class token punctua
  • docker-compose up --build -d 的作用

    docker compose up build d 根据Dockerfile重新下载需要的镜像并构建容器 xff0c 也就是说这句相当于是 docker compose build no cache 和 docker compose up
  • Docker-compose+Dockerfile构建并启动php7.4镜像

    利用官方镜像 43 Dockerfile构建符合自己要求php7 4镜像 DockerFile apt官方源太慢时 xff0c 切换apt源该dockerfile支持的php额外扩展 bcmatch event exif gd mysqli
  • Kali2022安装Docker和Docker-compose以及更改国内镜像源

    装之前可以选择更新一下软件库 root kali apt update 安装docker root kali apt install docker io root kali docker version 查看Docker版本 root ka
  • docker-compose搭建mongo+elasticsearch+graylog运行环境

    graylog是一个小型的开源日志收集 分析 展示框架 主要graylog运行需要mongo elasticsearch xff0c 所以他们就组成了一个小的整体 一般在虚拟机上搭建 xff0c 可以分开安装部署 xff0c 但是既然是一个
  • macbook m1上安装docker-compose

    之前我已安装好了docker 在网站https github com docker compose releases 下载docker compose linux aarch64 放到我的 Users a1目录下 进入目录cd Users
  • Docker Compose部署Springboot+Mysql项目

    声明 xff1a 本文CSDN作者原创投稿文章 xff0c 未经许可禁止任何形式的转载 xff0c 原文链接 在上一篇文章Spring Boot Maven 43 Docker打包中 xff0c 我们实现了将Springboot项目源代码一
  • 使用docker-compose配置mysql数据库并且配置用户密码

    下面要求环境 xff1a 一定要安装docker ce和docker compose才能进行下面步骤 linux找到你要放mysql的目录 创建一个docker compose yml 以下配置了外部数据卷 外部配置文件 外部初始化文件 x
  • Docker Compose

    1 Docker Compose官网说明 理解 Compose是Docker官方的开源项目 需要安装 xff01 Dockerfile 让程序在任何地方运行 web服务 redis mysql nginx 多个容器 run Compose的
  • rxjava - compose()操作符

    1 问题背景 想要给多个流重复应用 34 一系列 34 相同的操作符 该怎么办 比如 我们使用Rx 43 Retrofit进行网络请求时 都有遇到这样场景 要在io线程中请求数据 在主线程订阅 更新UI 所以必须频繁使用下面这样的代码 su
  • Jetson tx2(JetPack 4.4)配置pytorch环境

    下载pytorch 下载pytorch1 7 xff1a 我的系统是JetPack4 4 xff0c 要求pytorch gt 61 1 7 安装pytorch span class token function sudo span spa
  • Jetpack学习之WorkManager

    绝大部分应用程序都有在后台执行任务的需求 根据需求的不同 Android为后台任务提供了多种解决方案 如JobScheduler Loader Service等 WorkManager为应用程序中那些不需要及时完成的任务提供了一个统一的解决
  • Android DataBinding的基本使用

    5 DataBinding https developer android com topic libraries data binding custom conversions 数据绑定库是一种支持库 借助该库 您可以使用声明性格式 而非
  • jetpack Compose 学习笔记

    目录 Modifier clickable 取消点击水波纹 LazyColum 相关 Modifier clickable 取消点击水波纹 modifier Modifier clickable onClick indication nul
  • Jetpack学习之Lifecycle

    Jetpack是Google为了解决Android架构问题而引入的 Google官方说的说法 Jetpack是一套库 工具和指南 可以帮助开发者更轻松地编写应用程序 Jetpack中的组件可以帮助开发者遵循最佳做法 摆脱编写样板代码的工作并
  • Nvidia TX2 刷机教程 JetPack-L4T-3.0-linux-x64.run

    前言 本教程特别针对刷机被墙的朋友 如果没有被墙 其实按照官方文档一步一步操作就行 这期间我参考了特别多的网页 也去nvidia官方论坛问过 其实截止到2019年2月16日 jetpack3 3 是可以很轻松的被装上的 主要是3 0被墙 而
  • Navigation Preview unavailable in Android Studio 3.4 Preview

    Navigation Preview unavailable in Android Studio 3 4 Preview 最近在学Jetpack Navigation组件 但是在写navigation资源文件的时候 Preview 显示不出
  • jetpack compose 屏幕适配

    fun Int sdp Dp val screenDp Resources getSystem displayMetrics widthPixels Resources getSystem displayMetrics density re
  • Android Jetpack 之 DataStore

    1 概述 Google 推出了 JetPack 的新成员 DataStore DataStore 是一种新的数据存储方案 DataStore 以异步 一致的事务方式存储数据 克服了 SharedPreferences 的一些缺点 Jetpa

随机推荐

  • linux解压缩常见命令

    tar详解 c 建立压缩档案 x xff1a 解压 t xff1a 查看内容 r xff1a 向压缩归档文件末尾追加文件 u xff1a 更新原压缩包中的文件 这五个是独立的命令 xff0c 压缩解压都要用到其中一个 xff0c 可以和别的
  • linux 安装 gcc 方法

    今天安装Linux虚拟机发现竟然没有gcc 感觉是崩溃的 xff0c 上网寻找一下安装方法 xff0c 借鉴总结了一下得出下面步骤 使用root权限下载 sudo yum y install gcc gcc c 43 43 autoconf
  • MFC编程基础(—)

    MFC类的基本层次结构如图所示 xff1a CObject类是MFC提供的绝大多数类的基类 该类完成动态空间的分配和回收 xff0c 支持一般的诊断 出错信息处理和文档序列化等 CCmdTarget类主要负责将系统事件 xff08 消息 x
  • 开启windows10系统组策略更新、开启Windows自动更新、关闭自动更新

    win 43 R键打开运行 xff0c 输入regedit 按路径 计算机 HKEY LOCAL MACHINE SOFTWARE Policies Microsoft Windows WindowsUpdate AU 找到NoAutoUp
  • linux 中 /etc/systemd/system和/usr/lib/systemd/system 的区别

    每一个 Unit xff08 服务等 xff09 都有一个配置文件 xff0c 告诉 Systemd 怎么启动这个 Unit Systemd 默认从目录 etc systemd system 读取配置文件 但是 xff0c 里面存放的大部分
  • Vue3使用axios请求数据后使用v-for显示不出数据

    getAccount let that 61 this axios url 39 http localhost 8080 api GetAllUniAccounts 39 method 39 post 39 then res 61 gt t
  • Axios请求中Content-Type的使用总结

    Axios请求头中的Content Type常见的有3种 xff1a 1 Content Type application json 2 Content Type application x www form urlencoded 3 Co
  • mycat全局序列号数据库方式

    1 server xml lt property name 61 34 sequnceHandlerType 34 gt 1 lt property gt 2 schema xml lt table name 61 34 z test 34
  • Warning: Packets out of order. Expected 8 received 0

    环境 xff1a linux 43 mycat 43 hyperf 43 es 原因 xff1a mycat进行了分片 解决 xff1a 修改文件路径 xff1a vendor hyperf database src Connectors
  • Ubuntu下不能切换中文,qt creator无法输入中文,sogo输入法(详细步骤)

    目录 xff1a 1 解决ubuntu 不支持切换中文 xff0c 并安装sogo输入法步骤 xff1b 2 解决Qt Creator不支持中文输入 xff1a 详细步骤 xff1a 一 解决ubuntu 不支持切换中文 xff0c 并安装
  • wordpress插件API入口

    lt php 64 package Moodo Zhong 64 version 1 0 0 Plugin Name Moodo Zhong Plugin URI http wordpress org plugins hello dolly
  • PHP源码目录说明

    1 build 和编译有关的目录 2 ext 扩展库代码 xff0c 例如 MySQL zlib iconv 等我们熟悉的扩展库 其中 ext standard 目录下是常用的标准函数集 3 main 主目录包含主要的 PHP 宏和定义 4
  • 终端程序定义示例

    interrupt 0 外部中断0 interrupt 1 T0中断 interrupt 2 外部中断1 interrupt 3 T1中断 interrupt 4 串口中断 我来告诉你实质 xff1a 单片机的中断处理是这样工作的 xff0
  • lisp学习资料

    中文LISP学习网站 CL HTTP franz com 217条消息 使用hunchentoot搭建Lisp web 服务器 keyboardOTA的博客 CSDN博客
  • GO调用C语言之字符串传递

    C xff1a hello h include lt stdlib h gt include lt stdio h gt include lt string h gt char abc int strnum char str C hello
  • C++-基础语法-cin.getline() 与 cin.get() 的区别,以及getline()函数使用方法

    参考声明 xff1a C 43 43 primer plus https blog csdn net best fiends zxh article details 53064771 https blog csdn net u0114216
  • Kotlin开发中的一些Tips(二)

    接着上一篇 xff0c 最近又整理了一些 1 作用域函数选择 目前有let run with apply 和 also五个作用域函数 官方文档有张表来说明它们之间的区别 xff1a 总结一下有几点区别 xff1a apply和also返回上
  • Jetpack Compose 从入门到入门(一)

    Jetpack Compose 是用于构建原生 Android 界面的新工具包 它使用更少的代码 强大的工具和直观的 Kotlin API xff0c 可以帮助您简化并加快 Android 界面开发 xff0c 打造生动而精彩的应用 它可让
  • Jetpack Compose 从入门到入门(二)

    开始布局部分 这部分我个人感觉没有必要每个组件 属性都详细说到 xff0c 否则篇幅会很长 建立起Compose中的组件与 Android Views的一个对应关系就够了 具体还是需要在实际的使用中去熟悉 1 Column 子元素按竖直顺序
  • Jetpack Compose 从入门到入门(三)

    本篇开始介绍Jetpack Compose 中的修饰符Modifier 修饰符可以用来执行以下操作 xff1a 更改可组合项的大小 布局 行为和外观 添加信息 xff0c 如无障碍标签 处理用户输入 添加高级互动 xff0c 如使元素可点击