赞
踩
本文会对Modifier修饰符进行详尽的解说,报你收货满满
本文git地址:
https://github.com/ymeddmn/ModifierIntroduce
Modifier 可以被翻译为修饰符,可以用来修饰以下内容:
更改可组合项的大小、布局、行为和外观
添加信息,如无障碍标签
处理用户输入
添加高级互动,如使元素可点击、可滚动、可拖动或可缩放
第三节属性扩展中的案例都是基于本节中 item 方法的形参进行赋值得到的
@Composable fun item1(m: Modifier) { Column( modifier = Modifier.fillMaxSize(1f), horizontalAlignment = Alignment.CenterHorizontally ) { Box( modifier = m .size(100.dp) .background(color = Color.Red), contentAlignment = Alignment.Center ) { Text( text = "安安安安卓", textAlign = TextAlign.Center, style = TextStyle(color = Color.White) ) } Spacer(modifier = Modifier.height(10.dp)) } }
这里起初我是没头绪的,就拼了命的百度找资料的,但是说实话一篇讲这里的文章都没有。所以只能去官网翻译官方文档了。基本上花了半小时才搞明白啥意思。眼睛又废了,本周计划的 Livedata 源码也讲不了了
总的来说 selectable 就是用来实现单选的,可作为 RadioGroup 使用,也可作为 TabView 使用。
val icons = listOf<Triple<Int, Int, String>>( Triple(R.drawable.apple, R.drawable.lufeicry, "海贼王"), Triple(R.drawable.nameismile, R.drawable.nameicry, "娜美"), Triple(R.drawable.luobinsmile, R.drawable.luobincry, "罗宾") ) var selectedItem = remember { mutableStateOf(icons[0]) } Column( modifier = Modifier.fillMaxSize(1f), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { Row { Text( text = "公众号:\"安安安安卓\",选择:", style = TextStyle( color = Color.Black, fontSize = 15.sp ), modifier = Modifier.weight(0.7f) ) Text( text = selectedItem.value.third, style = TextStyle(color = Color.Red, fontSize = 25.sp), modifier = Modifier.weight(0.3f) ) } Row( // modifier = Modifier // .selectableGroup(), horizontalArrangement = Arrangement.SpaceAround ) { icons.forEach { val selected = selectedItem.value == it Image( painter = painterResource(id = if (selected) it.first else it.second), contentDescription = null, modifier = Modifier .selectable( selected = selected, enabled = true, role = null, onClick = { selectedItem.value = it }) .size(100.dp) ) } } }
item1(m = Modifier.background(color = Color.Blue).fillMaxSize(0.75f))
设置属性后填充了父容器 0.75 倍的大小
item1(m = Modifier.background(color = Color.Blue).height(30.dp))
设置高度为 30 后,宽度也跟随进行了改变
同 height
代码
item1(m = Modifier.background(color = Color.Blue).size(30.dp))
效果图
宽高都变为了 30dp
item1(m = Modifier.background(color = Color.Red))
item1(m = Modifier.background(color = Color.Red,shape = CircleShape))
item1(m = Modifier.background(color = Color.Red,shape = RoundedCornerShape(10.dp)))
2.效果
item1(m = Modifier.background(brush = Brush.linearGradient(mutableListOf(Color.Red,Color.Green,Color.Yellow,Color.Gray))))
默认的线性渐变效果是从左上到右下的
加上它 Column 就可以垂直方向进行滚动了
Column(
modifier = Modifier
.verticalScroll(rememberScrollState())
.fillMaxSize(1f)
)
item1(
m = Modifier
.background(color = Color.Red,shape = CircleShape)
.padding(4.dp)
.border(border = BorderStroke(2.dp, color = Color.Green),shape = CircleShape)
)
效果
本例实现了这样一个效果,先添加圆形背景,再添加 padding,最后添加圆形 border
注意 background 方法和 clip 方法不能同时使用,否则 background 会覆盖 clip 的效果
Box(modifier = Modifier.clip(CircleShape)) {
Box(Modifier.size(200.dp).background(color = Color.Green))
}
暂无
根据文档中的描述,offset 可以对控件内部元素的内容进行偏移,比如:
如果内部元素是 LTR,则 x 正值向右,负值向左
如果内部元素是 RTL,则 x 正值向左,负值向右
item1(m = Modifier.background(color = Color.Red).offset(x=30.dp))
与 offset 类似,不过不会考虑布局方向。
正值向右或下,负值向左或上
暂无
设置透明度
item1(m = Modifier.background(color = Color.Red).alpha(0.3f))
让任意控件变的可点击,并且会附加水波纹效果
代码
item1(m = Modifier.background(color = Color.Red).clickable(onClick = {
Log.e(“tag”,“安安安安卓”)
}))
效果
打印日志
E/tag: 安安安安卓
E/tag: 安安安安卓
E/tag: 安安安安卓
E/tag: 安安安安卓
可以设置控件的最小尺寸
item1(m = Modifier.background(color = Color.Red).defaultMinSize(300.dp))
item1 中控件的宽度是 100dp,我们将最小控件尺寸设置为 300dp,然后控件宽度自动的变为了 300dp,说明最小尺寸生效了。
暂无
暂无
暂无
暂无
设置最小高度
使我们的空间可以水平滑动,我们代码中用的 Text 做 demo,结果 Text 变成了单行可滑动
Text(
text = "公众号,安安安安卓,是一个用来分享安卓知识的公众号,ad发法撒扥a懂法A栋发扥as扥",
modifier = Modifier
.horizontalScroll(enabled = true, state = ScrollState(12))
.height(100.dp)
.background(color = Color.Green),
textAlign = TextAlign.Center
)
暂无
暂无
给控件设置 id
使用ConstraintLayout的时候会有用
item1(m = Modifier.background(color = Color.Red).layoutId("name"))
暂无
暂无
暂无
暂无
暂无
暂无
暂无
暂无
暂无
暂无
暂无
代码
效果
重新设置最小高度,
item1(m = Modifier.background(color = Color.Red).requiredHeight(height = 20.dp))
蓝框中的高度是调用了 requireHeightIn 方法的效果
框外的是正常的控件高度
同:requireHeightIn
同:requireHeightIn
同:requireHeightIn
对控件里面的内容进行缩放
item1(m = Modifier.background(color = Color.Red).scale(2f))
阴影效果
item1(
m = Modifier
.background(color = Color.Red)
.shadow(elevation = 3.dp, shape = RectangleShape,clip = true)//不知道是否是我用的不对,效果非常不好看
)
感觉效果好丑,肯定是我用错了
最小尺寸
暂无
非常适合用来做开关效果,本例我们用自己找到的两张图模拟点击切换状态
val selected = remember { mutableStateOf(true) } Image( painter = painterResource(id = if (selected.value) R.drawable.apple else R.drawable.luobinsmile), contentDescription = null, modifier = Modifier .toggleable( value = selected.value, enabled = true, role = null, onValueChange = { selected.value = it }) .size(100.dp) )
暂无
可以设置最小尺寸和最大尺寸
item1(m = Modifier.background(color = Color.Red).widthIn(min = 50.dp,max = 200.dp))
暂无
暂无
暂无
zIndex 用来设置控件的层级,zIndex 值较大的会覆盖在 zIndex 值较小的控件上方。如果两个控件 zIndex 一样大,那么会按照他们的代码中的顺序摆放
代码
本例代码,我们创建了两个 Text,
第一个红色 zIndex=5
第二个绿色 zIndex=4
按我们的预期红色的会处于绿色的控件的顶部
Box { Text( text = "安安安安卓2", modifier = Modifier .size(100.dp) .background(color = Color.Red) .zIndex(5f) ) Text( text = "安安安安卓1", modifier = Modifier .size(150.dp) .background(color = Color.Green) .zIndex(4f) ) }
最终效果与我们预期的一致
关注公众号学习更多知识
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。