android - Jetpack compose Box 中的等宽和等高

标签 android android-jetpack-compose

所以我正在尝试使用 JetPack compose 创建一个棋盘,并设法绘制了一些布局。但是,现在我有一个问题,我希望棋盘格的高度与宽度相同。我希望它是完美的正方形。
注:我不想给出任何固定宽度或高度。我想在屏幕宽度中放置正方形,然后每个正方形的高度应该与宽度一样多。
我试过的:

@ExperimentalFoundationApi
class PlayGameActivity : BaseActivity() {
    val darkSquare = Color(0xFF779556)
    val lightSquare = Color(0xFFEBECD0)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            Column {
                Board()
            }
        }
    }

    @Composable
    fun Board() {
        Column {
            for (i in 0 until 8) {
                Row {
                    for (j in 0 until 8) {
                        val isLightSquare = i % 2 == j % 2
                        val squareColor = if (isLightSquare) lightSquare else darkSquare
                        Box(
                            modifier = Modifier
                                .weight(1f)
                                .background(squareColor)
                        ) {
                            Text(text = "${i + j}")
                        }
                    }
                }
            }
        }
    }

}
它给了我以下结果。
Chess Box Layout
我期望它看起来像什么:
Chess Box Expectations
知道如何计算宽度并将其设置为与正方形的宽度相同吗?

最佳答案

一个更简单的解决方案是设置 aspectRatio修饰符上的属性:

@Composable
fun Board() {
    Column {
        for (i in 0 until 8) {
            Row {
                for (j in 0 until 8) {
                    val isLightSquare = i % 2 == j % 2
                    val squareColor = if (isLightSquare) lightSquare else darkSquare
                    Box(
                        modifier = Modifier
                            .weight(1f)
                            .aspectRatio(1f)
                            .background(squareColor)
                    ) {
                        Text(text = "${i + j}")
                    }
                }
            }
        }
    }
}

关于android - Jetpack compose Box 中的等宽和等高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67708713/

相关文章:

java - 陷入通过 Firebase 获取名称的困境

android - 包含 ListView 的滚动布局

android - 有没有办法在 android Jetpack Compose 中自定义 LazyRow 拖动或滚动行为?

android - 如何在 Kotlin Jetpack Compose 中使用 rememberLauncherForActivityResult 读取文件?

Android Jetpack 撰写 (1.0.0-beta07) : TextField - None of the following functions can be called with the arguments supplied

android - 盒子没有填满最大尺寸 - Jetpack Compose

android - Jetpack 撰写 : How to avoid Button Text disappearing when Button size is small?

java - 如何动态更改状态栏中的文本

android studio SVG 文件导入出现错误@第 8 行 : Unsupported color format "rgba(0,0,0,0)"

android - 读取Android中的广告包