Compose - 其它设置、资源获取

本文介绍了JetpackCompose中的UI构建技术,包括使用drawWithContent自定义绘制,如添加红点;讨论了对齐方式如平面2D和线性1D方向的Alignment;探讨了Arrangement在布局中的应用,如Top、Bottom、Start、End等;提到了ContentScale在图像缩放中的不同模式;并详细阐述了TextStyle的参数以及如何设置文本样式;最后提到了Alpha透明度和ColorFilter颜色滤镜的使用,用于调整组件的视觉效果。

二、对齐方式 Alignment

2.1 平面方向(2D)

TopStartTopCenterTopEnd
CenterStartCenterCenterEnd
BottomStartBottomCenterBottomEnd

2.2 线性方向(1D)

2.2.1 设置 verticalAlignment

Top
CenterVertically
Bottom

2.2.2 设置 horizontalAlignment

StartCenterHorizontallyEnd

三、排列方式 Arrangement 

Top垂直放置子元素,使他们尽可能的靠近顶部。效果:上123###下
Bottom垂直放置子元素,使他们尽可能的靠近底部。效果:上###123下
Start水平放置子元素,使他们尽可能的靠近起点。效果:左123###右(自动适配国际化)
End水平放置子元素,使他们尽可能的靠近终点。效果:左###123右(自动适配国际化)
Center子元素靠近中心挤着。效果:##123##(自动适配国际化)
SpaceBetween头尾子元素分布在两端,其余平均分布剩下空间。效果:1##2##3(自动适配国际化)
SpaceAround头尾子元素离两段占半个间隔,其余子元素分布剩下空间。效果:#1##2##3#(自动适配国际化)

3.1 设置 verticalArrangement

3.2 设置 horizontalArrangement

四、缩放方式 ContentScale

不像 ImageView 的 ScaleType 把缩放和对齐合在一起操作,Image 分成了2个不同的属性。

4.1 总结一(谷歌)

Fit均匀缩放图片,并保持宽高比(默认)。如果内容小于指定大小,系统会放大图片以适应边界。    
Crop将图片居中裁剪到可用空间。
FillHeight缩放来源图片,保持宽高比不变,使边界与目标高度匹配。
FillWidth缩放来源图片,保持宽高比不变,使边界与目标宽度匹配。
FillBounds以非均匀方式垂直和水平缩放内容,以填充目标边界。(注意:如果将图片放入与其宽高比不完全相符的容器中,则图片会失真)。
Inside缩放来源图片,使宽高保持在目标边界内。如果来源图片在两个维度上都小于或等于目标,则其行为类似于 None。内容将始终包含在边界内。如果内容小于边界,则不会应用缩放。
None不对来源图片应用任何缩放。如果内容小于目标边界,则不会缩放以适应相应区域。
纵向图片横向图片
原始图片
Fit
Crop
FillHeight
FillWidth
FillBounds
Inside

来源图片大于边界

来源图片大于边界

来源图片小于边界

来源图片小于边界

None

来源图片大于边界

来源图片大于边界

来源图片小于边界

来源图片小于边界

4.2 总结二(我的)

模式图片
宽高 > 屏幕宽高 < 屏幕宽 > 屏幕高 > 屏幕
不缩放

None

居中显示

裁剪超出部分

居中显示

四周留白

纵向:留白

横向:裁剪

纵向:裁剪

横向:留白

等比缩放

Inside

超出控件更长的边:匹配

超出控件较短的边:留白

居中显示

四周留白

纵向:留白

横向:匹配

纵向:匹配

横向:留白

Crop

裁剪

超出控件更长的边:裁剪

超出控件较短的边:匹配

超出控件更长的边:裁剪

超出控件较短的边:匹配

纵向:匹配

横向:裁剪

纵向:裁剪

横向:匹配

Fit

超出控件更长的边:匹配

超出控件较短的边:留白

超出控件更长的边:匹配

超出控件较短的边:留白

纵向:留白

横向:匹配

纵向:匹配

横向:留白

FillHeight

纵向:缩小到匹配

横向:剪裁或留白

纵向:拉伸到匹配

横向:裁剪或留白

纵向:匹配

横向:裁剪

纵向:匹配

横向:留白

FillWidth

纵向:剪裁或留白

横向:缩小到匹配

纵向:裁剪或留白

横向:拉伸到匹配

纵向:留白

横向:匹配

纵向:裁剪

横向:匹配

不等比缩放FillBounds宽高按各自比例拉缩小到匹配宽高按各自比例拉伸到匹配

纵向:拉伸后匹配

横向:缩小后匹配

纵向:缩小后匹配

横向:拉伸后匹配

4.3 总结三(网络)

下方图片:bigger = 图片宽高都比控件大,smaller=图片宽高都比屏幕小,taller = 图片高于控件高度,longger = 图片宽于控件宽度。参考文章

五、资源文件 Resource

官方文档

避免使用定编码的方式,尺寸详见屏幕适配,颜色详见自定义主题

5.1 尺寸 dimens.xml

val smallPadding = dimensionResource(R.dimen.padding_small)
Text(
    text = "...",
    modifier = Modifier.padding(smallPadding)
)

5.2 颜色 colors.xml

//painterResource 可在主线程中解码并解析资源的内容。
Divider(color = colorResource(R.color.colorGrey))

5.3 字符串 strings.xml

Text(
    text = stringResource(R.string.compose)
)

//字符串复数
// <plurals name="runtime_format">
//    <item quantity="one">%1$d minute</item>
//    <item quantity="other">%1$d minutes</item>
// </plurals>
Text(
    text = pluralStringResource(R.plurals.runtime_format, quantity, quantity)
)

//字符串数组
//<string-array name="navLabels">
//    <item>主页</item>
//    <item>消息</item>
//    <item>个人</item>
//</string-array>
val navLabels = stringArrayResource(id = R.array.navLabels)

5.4 图片 drawable

Icon(
    painter = painterResource(id = R.drawable.ic_logo),
    contentDescription = null
)

六、TextStyle

参考文章

constructor(
    color: Color = Color.Unspecified,    //文字颜色
    fontSize: TextUnit = TextUnit.Unspecified,    //字体大小
    fontWeight: FontWeight? = null,    //字重
    fontStyle: FontStyle? = null,    //字体样式
    fontSynthesis: FontSynthesis? = null,
    fontFamily: FontFamily? = null,    //字体
    fontFeatureSettings: String? = null,
    letterSpacing: TextUnit = TextUnit.Unspecified,    //字间距
    baselineShift: BaselineShift? = null,
    textGeometricTransform: TextGeometricTransform? = null,
    localeList: LocaleList? = null,
    background: Color = Color.Unspecified,
    textDecoration: TextDecoration? = null,
    shadow: Shadow? = null,    //阴影
    textAlign: TextAlign? = null,    //对齐方式
    textDirection: TextDirection? = null,    //装饰(下划线、中划线)
    lineHeight: TextUnit = TextUnit.Unspecified,    //行高
    textIndent: TextIndent? = null
)

七、透明度 Alpha

取值范围 0f-1f,默认1f。

颜色滤镜 ColorFilter

在上层覆盖一层颜色(可用于选中后的颜色,适合单一颜色的图片,省去了几套图)。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值