Compose 通过自定义Modifier修改布自定义布局

Posted 安果移不动

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Compose 通过自定义Modifier修改布自定义布局相关的知识,希望对你有一定的参考价值。

我们想自定义一个属性

让他距离顶部这么长

看图一就好

图二pading(start=24.dp)只可以让Text的顶部距离顶部24 而非基准线距离顶部24

那么 如何进行操作呢

package com.anguomob.jecpack.activity.compose.layout

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.padding
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.FirstBaseline
import androidx.compose.ui.layout.layout
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp

//this.then返回的是本身
fun Modifier.firstBaseLineToTop(firstBaseLineToTop: Dp) = this.then(
    //修改原色测量方式和布局位置
    layout  measurable, constraints ->
        //测量元素
        val placeable = measurable.measure(constraints)
        //测量之后 获取元素的基准线
        val firstBaseLine = placeable[FirstBaseline]
        //元素新的y坐标 =新基线值-旧基线值
        val placeableY = firstBaseLineToTop.roundToPx() - firstBaseLine

        val height=placeable.height+placeableY
        val width=placeable.width

        layout(width, height) 
            placeable.placeRelative(0, placeableY)
        
    
)

@Preview()
@Composable
fun TextWithPaddingToBaseline() 
    Text(
        text = "Hi there",
        Modifier
            .firstBaseLineToTop(124.dp)
            .background(Color.Red)
    )

 

 

开发者涨薪指南 48位大咖的思考法则、工作方式、逻辑体系

以上是关于Compose 通过自定义Modifier修改布自定义布局的主要内容,如果未能解决你的问题,请参考以下文章

Jetpack Compose 自定义布局以及固有特性测量

Jetpack Compose 自定义布局以及固有特性测量

Jetpack Compose实践:完成自定义手势处理

Compose | 一文理解神奇的Modifier

Compose | 一文理解神奇的Modifier

使用Jetpack Compose完成自定义手势处理