繁体   English   中英

Jetpack Compose - 设置伴奏占位符的尺寸

[英]Jetpack Compose - Setting dimensions for Accompanist placeholder

我正在使用的库: "com.google.accompanist:accompanist-placeholder-material:0.23.1"

我想在加载 state 时在组件的位置(或上方)显示一个占位符。

我为Text执行以下操作:

MaterialTheme() {
    var placeholderVisible by remember { mutableStateOf(false) }
    LaunchedEffect(Unit) {
        while (true) {
            delay(1000)
            placeholderVisible = !placeholderVisible
        }
    }
    Box(
        modifier = Modifier.fillMaxSize(),
        contentAlignment = Alignment.Center
    ) {
        Box(
            modifier = Modifier
                .border(1.dp, Color.Red)
                .padding(16.dp)
        ) {
            Text(
                modifier = Modifier
                    .then(
                        if (placeholderVisible) {
                            Modifier.height(28.dp).width(62.dp)
                        } else {
                            Modifier
                        }
                    )
                    .placeholder(
                        visible = placeholderVisible,
                        highlight = PlaceholderHighlight.shimmer()
                    ),
                text = if (placeholderVisible) "" else "Hello"
            )
        }
    }
}

我明白了:

在此处输入图像描述

相反,我希望无论我设置占位符的高度或宽度有多大,它都不会以任何方式参与测量过程,并且如果我愿意,甚至能够在其他组件上绘制自己(在这种情况下,假设红色边框)。

作为我想要的效果,带有红色边框的框将始终具有尺寸,就好像Modifier.height(28.dp).width(62.dp)不存在一样。

我知道我可以使用drawWithContent在组件的边界之外绘制,将矩形或圆形(或其他)的大小指定为component's size + x.dp.toPx() (或类似的东西)。 但是如何使用Modifier.placeholder做到这一点?

理想情况下,我需要类似Modifier.placeholder(height = 28.dp, width = 62.dp)

因此,无论有没有这个理想Modifier ,UI 都不应该改变(当然,可能存在或不存在的微光框除外)。

我想我可以通过修改这个Modifier的源代码来解决这个问题,但我希望我不需要转向那个。

只需用下面的代码替换您的Text() ,也许条件修饰符是上面代码中的问题

        Text(
            modifier = Modifier
                .size(width = 62.dp, height = 28.dp)
                .placeholder(
                    visible = placeholderVisible,
                    highlight = PlaceholderHighlight.shimmer()
                ),
            text = if (placeholderVisible) "" else "Hello",
            textAlign = TextAlign.Center
        )

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM