首页 > 解决方案 > JetpackCompose Modifier 属性的 aspectRatio(1f) 和 fillMaxSize() 有什么区别

问题描述

当我将修饰符设置如下

class MainActivity: AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            Clock(modifier = Modifier
                .aspectRatio(1f)
                .fillMaxSize()
                .padding(16.dp))
        }
    }
}

我两者都有fillMaxSize(),并且aspectRaio(1f)根据我看到其他人的代码并且都设置了。他们在做同样的事情吗?还是出于不同的目的需要它们?(我尝试删除每个,似乎结果相同)。

P/S:我试图查看代码以了解不同之处,但无法按照How to see JetpackCompose kotlin source in Android Studio (4.2)?

标签: androidandroid-jetpack-compose

解决方案


看起来aspectRatio(1f)会使其成为正方形,而fillMaxSize()会使其占据整个屏幕。

下面的例子

        setContent {
            Clock(modifier = Modifier
                .fillMaxSize()
                .aspectRatio(1.0f)
                .padding(64.dp))
        }

或者

        setContent {
            Clock(modifier = Modifier
                .fillMaxSize()
                .padding(64.dp))
        }

其中fillMaxSize()优先,drawRect将如下

在此处输入图像描述

但是,当我们有 时aspectRation(1.0f),以以下任一示例为例,

        setContent {
            Clock(modifier = Modifier
                .aspectRatio(1.0f)
                .fillMaxSize()
                .padding(64.dp))
        }

或者

        setContent {
            Clock(modifier = Modifier
                .aspectRatio(1.0f)
                .padding(64.dp))
        }

应该是

在此处输入图像描述


推荐阅读