如何读取 Android 上的当前屏幕方向?

How to read current screen orientation on Android?

我想使用 Jetpack Compose 在 Android 上读取当前屏幕方向。

我已经尝试在 @Composable 中关注:

val o = LocalActivity.current.requestedOrientation

val o = LocalContext.current.display.rotation

val o = LocalActivity.current.resources.configuration.orientation

但徒劳无功。

Log.d("Orientation", "The Orientation $o")

每次我旋转方向,这些日志输出都保持不变。所以他们似乎没有改变。

如何读取屏幕方向?

您可以覆盖 activity 的 onConfigurationChanged(Configuration) 方法。

要调用此方法,您还需要在清单文件中指定更改 android:configChanges 属性。

查看指定的内容和方式,请检查 this docs

您可以从 BoxWithConstraints 获取并比较 宽度 高度

一个简单的例子:

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
          //Our composable that gets the screen orientation
            BoxWithConstraints {
                val mode = remember { mutableStateOf("") }
                mode.value = if (maxWidth < maxHeight) "Portrait" else "Landscape"
                Text(text = "Now it is in ${mode.value} mode")
            }
        }
    }
}
androidx.compose.ui.platform.LocalConfiguration.current.orientation

帮我解决了。