Android Jetpack Compose将修改器属性设置为设备宽度或高度的百分比

0 人关注

我希望能够将所有修改器属性设置为已知设备宽度或高度的百分比。我们的想法是,没有必要为所有的手机--小型、中型或大型手机--支持不同的屏幕尺寸。所有的手机都应该有与当前设备宽度或高度相关的相同的可组合尺寸。而我们应该只为 tablets landscape mode 实现不同的屏幕尺寸。

我知道,对于宽度、高度,我们可以使用 .fillMaxWidth(0.9f) ,并设置与Constraints.maxWidth相匹配的浮动值[从=0.0,到=1.0],再乘以我们指定的分数。

我想指定类似于dp、sp的修改器属性,但要使用类似dw(设备宽度)和dh(设备高度)的东西。

android
kotlin
android-jetpack-compose
slaviboy
slaviboy
发布于 2022-02-24
1 个回答
slaviboy
slaviboy
发布于 2022-02-24
已采纳
0 人赞同

这里是一个简单的实现,使用 androidx.window:window:1.0.0 库来获得实际的设备宽度和高度,并将其转换为 Dp .当你希望最小的一面总是与宽度相匹配,最大的一面与高度相匹配时,请使用 dw,dh 。或者当你希望宽度和高度根据设备的旋转而改变时,使用 adw,adh :横向或纵向模式。

你可以在这里找到源代码

要使用该库,只需包括依赖性的

implementation 'com.github.slaviboy:JetpackComposePercentageUnits:1.0.0'

现在我们可以将offset, padding, width, height, border, font size...设置为根据设备宽度或高度进行缩放。

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // init device width and height
        initSize() 
        setContent { 
            // your UI here
        Text(
            text = "Hello",
            fontSize = 0.04.sh,
            color = Color.Green, 
            modifier = Modifier
                .offset(x = 0.07.dw, y = 0.2.dh)
                .border(
                    width = 0.01.dw,
                    color = Color.Red,
                    shape = RoundedCornerShape(0.05.dw)