Jetpack Compose Modifier用法详解,如何保证高可用
Card(elevation = 4.dp) { /…/ }
}
}
上面的代码中,我们通过Modifier类调用的方式,去调用不同的修饰符函数。
- clickable 使可组合项响应用户输入,并显示涟漪。
- padding 在元素周围留出空间。
- fillMaxWidth 使可组合项填充其父项为它提供的最大宽度。
- size() 指定元素的首选宽度和高度
注意:修饰符的函数调用顺序非常重要。由于每个函数都会对上一个函数返回的 Modifier 进行更改,因此顺序会影响最终结果。比如上面是对Column整体控件都可以点击,但如果我们把,padding跟clickable的修饰符的顺序换一下。那么Column的点击范围就需要扣除padding的部分。
@Composable
fun ArtistCard(/…/) {
val padding = 16.dp
Column(
modifier = Modifier
.clickable(onClick = onClick)
.padding(padding)
.fillMaxWidth()
) {
// rest of the implementation
}
}
二:常用的Modifier的函数方法介绍
Modifier涉及到的方法很多,我们可以从官网的地址去查看Modifier方法,下面我们会进可能的去涉及解释到常用方法的使用。
@Composable
fun PaddedComposable() {
Box(modifier = Modifier.size(300.dp,300.dp).background(Color.Blue)){}
}
@Composable
fun PaddedComposable() {
Text(“Hello World”, modifier = Modifier.padding(20.dp))
}
@Preview()
@Composable
fun paddingTest(){
Column(modifier = Modifier.size(200.dp).background(Color.Gray).padding(20.dp)) {
Box(modifier = Modifier.size(30.dp).background(Color.Red).padding(top = 4.dp)) {}
Box(modifier = Modifier.size(30.dp).padding(start = 4.dp,top = 4.dp).background(Color.Green)) {}
Box(modifier = Modifier.size(30.dp).padding(vertical = 4.dp).background(Color.Red)) {}
Box(modifier = Modifier.size(30.dp).padding(horizontal = 4.dp).background(Color.Green)) {}
}
}
@Preview()
@Composable
fun modiferTest(){
Box(modifier = Modifier.size(300.dp,300.dp){}
}
@Composable
fun FixedSizeComposable() {
Box(Modifier.size(90.dp, 150.dp).background(Color.Green)) {
Box(Modifier.requiredSize(100.dp, 100.dp).background(Color.Red))
}
}
- fillMaxHeight 填充父项为它提供的最大的高度
- fillMaxWidth 填充父项为它提供的最大的宽度
- fillMaxSize 填充父项的宽高
- width 宽度
@Preview()
@Composable
fun modiferTest(){
Box(modifier = Modifier.size(300.dp,300.dp).background(Color.Blue)){
Box(modifier = Modifier.fillMaxHeight().fillMaxWidth().background(Color.Green))
Box(modifier = Modifier.fillMaxWidth().height(50.dp).background(Color.Red))
Box(modifier = Modifier.width(50.dp).fillMaxHeight().background(Color.Black))
Box(modifier = Modifier.fillMaxSize().background(Color.Gray))
}
}
- wrapContentSize 根据子级元素的宽高来确定自身的宽度和高度,如果自身设置了最小宽高的话则会被忽略。当unbounded参数为true的时候,自身设置了最大宽度的话也会被忽略
- wrapContentWidth 根据子级元素的宽度来确定自身的宽度,如果自身设置了最小宽度的话则会被忽略。当unbounded参数为true的时候,自身设置了最大宽度的话也会被忽略
@Preview()
@Composable
fun modiferTest(){
Column(modifier = Modifier.wrapContentSize().background(Color.Blue).padding(10.dp){
Box(modifier = Modifier.size(30.dp, 30.dp).background(Color.Red)) {}
Box(modifier = Modifier.padding(top = 4.dp).wrapContentWidth().height(60.dp).background(Color.Green).padding(60.dp))
Box(modifier = Modifier.padding(top = 4.dp).width(60.dp).wrapContentHeight().background(Color.Gray).padding(30.dp)){}
}
}
- preferredWidth 设置初始宽度
- preferredHeight 设置初始高度
@Preview()
@Composable
fun preferredTest(){
Column(modifier = Modifier
.size(150.dp)
.background(Color.Red)){
Box(modifier = Modifier.preferredSize(40.dp).background(Color.Green))
Box(modifier = Modifier.padding(top = 4.dp).preferredSize(40.dp,20.dp).background(Color.Green))
Box(modifier = Modifier.padding(top = 4.dp).preferredWidth(40.dp).height(20.dp).background(Color.Green))
Box(modifier = Modifier.padding(top = 4.dp).width(20.dp).preferredHeight(40.dp).background(Color.Green))
}
}
- widthIn(最小宽度,最大宽度) 设置自身的最小,最大宽度
- heightIn(最小高度,最大高度) 设置自身的最小,最大高度
@Preview()
@Composable
fun preferredTest(){
Column(modifier = Modifier
.size(300.dp)
.background(Color.Red)){
Text(text = “测试测试测试”, modifier = Modifier.sizeIn(40.dp,40.dp,100.dp,100.dp))
Text(text = “测试测试,测试测试,测试测试”, modifier = Modifier.sizeIn(40.dp,40.dp,100.dp,100.dp))
Text(text = “测试”, modifier = Modifier.widthIn(20.dp,100.dp))
Text(text = “测试,测试,测试”, modifier = Modifier.widthIn(20.dp,100.dp))
Text(text = “测试”, modifier = Modifier.heightIn(20.dp,100.dp))
Text(text = “测试,测试,测试,测试,测试,测试,测试,测试,测试,测试,测试”, modifier = Modifier.heightIn(20.dp,100.dp))
}
}
- preferredWidthIn(最小宽度,最大宽度) 设置初始最小和最大宽度
- preferredHeightIn(最小高度,最大高度) 设置初始最小和最大高度
@Preview()
@Composable
fun preferredTest(){
Column(modifier = Modifier
.size(300.dp)
.background(Color.Red)){
Text(text = “测试测试”, modifier = Modifier.preferredSizeIn(40.dp,40.dp,100.dp,100.dp))
Text(text = “测试测试,测试测试,测试测试”, modifier = Modifier.preferredSizeIn(40.dp,40.dp,100.dp,100.dp))
Text(text = “测试”, modifier = Modifier.preferredWidthIn(20.dp,100.dp))
Text(text = “测试,测试,测试”, modifier = Modifier.preferredWidthIn(20.dp,100.dp))
Text(text = “测试”, modifier = Modifier.preferredHeightIn(20.dp,100.dp))
Text(text = “测试,测试,测试,测试,测试,测试,测试,测试,测试,测试,测试,测试”, modifier = Modifier.preferredHeightIn(20.dp,100.dp))
}
}
@Composable
fun MatchParentSizeComposable() {
Box {
Spacer(Modifier.matchParentSize().background(Color.Green))
Text(“Hello World”)
}
}
@Preview()
@Composable
fun paddingFromBaseLineTest(){
Box(Modifier.background(Color.Yellow)) {
Text(text = “Hi there”,Modifier.paddingFromBaseline(top = 40.dp,bottom = 20.dp))
}
}
- offset(x,y) 设置偏移量. x是相对于x轴上的偏移,y是相对于y轴上的偏移。
- absoluteOffset(x,y)设置偏移量
@Preview()
@Composable
fun offsetTest(){
Column(Modifier.background(Color.Yellow).size(width = 150.dp, height = 70.dp)) {
Text(text = “Hi here”,Modifier.offset(x=10.dp,y = 20.dp))
Text(text = “Hi here two”,Modifier.absoluteOffset(x=10.dp,y = 20.dp))
}
}
总结
其实要轻松掌握很简单,要点就两个:
- 找到一套好的视频资料,紧跟大牛梳理好的知识框架进行学习。
- 多练。 (视频优势是互动感强,容易集中注意力)
你不需要是天才,也不需要具备强悍的天赋,只要做到这两点,短期内成功的概率是非常高的。
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。
以上就是总结的关于在面试的一些总结,希望对大家能有些帮助,除了这些面试中需要注意的问题,当然最重要的就是刷题了,这里放上我之前整理的一份超全的面试专题PDF,大家有兴趣的可以自行领取或者私信我:
还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
【Android核心高级技术PDF文档,BAT大厂面试真题解析】点击:Android架构视频+BAT面试专题PDF+学习笔记即可获取!查看免费领取方式!
E5%BC%80%E5%8F%91%E4%B8%8D%E4%BC%9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)即可获取!查看免费领取方式!**
[外链图片转存中…(img-yMUIH4pY-1645107207642)]
这里只是整理出来的部分面试题,后续会持续更新,希望通过这些高级面试题能够降低面试Android岗位的门槛,让更多的Android工程师理解Android系统,掌握Android系统。喜欢的话麻烦点击一个喜欢在关注一下~
Jetpack Compose Modifier用法详解,如何保证高可用相关推荐
- 一文详解 Prometheus 的高可用方案:Thanos
点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 背景 在高可用 prometheus:问题集锦文章中有简单提到 Prome ...
- 详解Nacos的高可用特性(转载)
前言 服务注册发现是一个经久不衰的话题,Dubbo 早期开源时默认的注册中心 Zookeeper 最早进入人们的视线,并且在很长一段时间里,人们将注册中心和 Zookeeper 划上了等号,可能 Zo ...
- SVN switch 用法详解 (ZZ)
SVN switch 用法详解 (ZZ) http://www.cnblogs.com/dabaopku/archive/2011/05/21/2052820.html 确实,以前不会用switch ...
- Class.forName()用法详解
Class.forName()用法详解 标签: classjvmjdbc数据库documentationjava 2012-03-29 09:39 40414人阅读 评论(8) 收藏 举报 分类: ...
- STL 中map的用法详解
STL 中map的用法详解 Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可 ...
- STL中map和string, vector 用法详解
1. map 用法详解 std map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成 ...
- idea2019配置gradle详解_Constraint Layout 2.0 用法详解
Constraint Layout 是最受欢迎的 Jetpack 库之一,它的 2.0 正式版本也发布啦 (目前最新版本 2.1.0-alpha1)!也许您已熟悉了 Constraint Layout ...
- sizeof,strlen用法详解
sizeof 前向声明: sizeof,一个其貌不扬的家伙,引无数菜鸟竟折腰,小虾我当初也没少犯迷糊,秉着"辛苦我一个,幸福千万人"的伟大思想,我决定将其尽可能详细的总结一下. 但 ...
- 计算机曝光模式有哪些,摄影:单反相机中P、A、S、M四种曝光模式的用法详解 -电脑资料...
这篇教程是向脚本之家的朋友介绍单反相机中P.A.S.M四种曝光模式的用法,对于摄影爱好者非常值得学习,推荐到脚本之家,喜欢的朋友一起来看看吧 很多朋友在初接触单反相机时对相机的P.A.S.M四种曝光模 ...
- CreateThread用法详解
CreateThread用法详解 今天我给大家讲一讲C++中的多线程编程技术,C++本身并没有提供任何多线程机制,但是在windows下,我们可以调用SDK win32 api来编写多线程的程序,下面 ...
最新文章
- 利用CSDN将图片自动存入AI Studio :pic2bml
- vim 查找并手动替换(笔记)
- 我对软件行业及大数据的理解
- 危!我用python克隆了女朋友的声音!
- 【旅行】——出发!露营去。
- 计算机专业开学要带电脑吗,大学上课要带电脑吗
- 目标检测矩形框与polygon数据增加--裁剪,拓展,旋转
- 在ASP.NET Web Application 中如何处理图片 【转】-有用
- python中用来回溯异常的模块_Python_10-异常处理
- spss文件 服务器登录,spss连接远程服务器
- 通过这本拼图学习Bash
- mysql常用的备份命令有哪些_MySQL常用备份还原命令
- html当前行突出显示,Pandas Dataframes to_html:突出显示表行
- idea安装python 插件_IntelliJ IDEA安装运行python插件方法
- flash cs4的新特性
- CSMA/CD协议最小帧长的思考
- H266 ISP 帧内子划分
- 诱人福利:猎豹移动雇游轮带全员一块儿航海
- 【中山大学计算机组成原理实验】单周期CPU设计与实现
- 道指mt4代码_MT4产品代码