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

sla*_*boy 0 android kotlin android-jetpack-compose

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

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

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

在此输入图像描述

sla*_*boy 9

这是使用androidx.window:window:1.0.0库获取实际设备宽度和高度并将其转换为Dp 的简单实现。dw,dh当您希望最小边始终与宽度匹配并且最大边始终与高度匹配时,请使用。adw,adh或者当您希望宽度和高度根据设备旋转而变化时使用:横向或纵向模式。

您可以在这里找到源代码

要使用该库,只需包含依赖项

implementation 'com.github.slaviboy:JetpackComposePercentageUnits:1.0.0'
Run Code Online (Sandbox Code Playgroud)

现在我们可以设置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)
                )
            )
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,所有内容都根据设备宽度或高度进行缩放,并且可组合项将匹配每个手机尺寸。

在此输入图像描述