簡體   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