Jetpack Compose 中的屏幕宽度和高度

Abd*_*ؤمن 103 android android-jetpack-compose

我想知道如何使用 Jetpack Compose 获取屏幕宽度和高度?

除了 之外,还有什么方法可以检索屏幕尺寸吗 getWindowManager().getDefaultDisplay()

Abd*_*ؤمن 221

您可以通过以下方式实现此目的LocalConfiguration.current

@Composable
fun PostView() {
  val configuration = LocalConfiguration.current

  val screenHeight = configuration.screenHeightDp.dp
  val screenWidth = configuration.screenWidthDp.dp

  ...

}

Run Code Online (Sandbox Code Playgroud)

  • 可能是获取像素大小的更好方法:`val Density = LocalDensity.current; val 配置 = LocalConfiguration.current; val screenWidthPx = with(密度) {configuration.screenWidthDp.dp.roundToPx()}` (15认同)
  • 如果您想获取以像素为单位的大小:`val screenDensity =configuration.密度Dpi / 160f`并乘以dp,例如`val screenHeight =configuration.screenHeightDp.toFloat() * screenDensity`。您可能还想“四舍五入”为整数。因为 px 是 `Int`。 (8认同)

Ric*_*per 7

其他解决方法包括:-

A.)BoxWithConstraints在层次结构的最高级别声明 a,然后访问maxHeight在框范围内公开的 和等效宽度属性

B.) 使用自定义布局

Layout(
 content = { ... }
){ measurables, constraints ->
 //Exposes constraints.maxWidth, and a height equivalent
}
Run Code Online (Sandbox Code Playgroud)


小智 6

我不认为这是最好的方法,但你可以尝试这个:

class Size {
    @Composable
    fun height(): Int {
        val configuration = LocalConfiguration.current
        return configuration.screenHeightDp
    }
    @Composable
    fun width(): Int {
        val configuration = LocalConfiguration.current
        return configuration.screenWidthDp
    }
}

Run Code Online (Sandbox Code Playgroud)

然后像这样使用这个值:

val size = Size()
val screenHeight = size.height()

Box(modifier = Modifier.height((screenHeigh/2).dp)) {
    //content
}

Run Code Online (Sandbox Code Playgroud)


Chi*_*mar 5

解决方案

我正在使用这种方法来获取ScreenWidthScreenHeight。这对我来说效果很好,您也可以使用它来制作响应式 UIJetpack Compose

@Composable
fun ScreenSizeHelper() {
    
    val context = LocalContext.current

    val displayMetrics = context.resources.displayMetrics
    
    //Width And Height Of Screen
    val width = displayMetrics.widthPixels
    val height = displayMetrics.heightPixels

    //Device Density
    val density = displayMetrics.density
    
}
Run Code Online (Sandbox Code Playgroud)