【问题标题】:How to force orientation for some screens in Jetpack Compose?jetpack compose:如何强制某些屏幕的方向
【发布时间】:2021-09-17 22:24:51
【问题描述】:

使用 jetpack compose 导航,我想它可能会成为一个单一的活动应用程序。如何仅对某些可组合项(屏幕)强制定向?说我是否只想在播放视频而不是其他屏幕时强制横向?如果没有导航,可以在清单中声明方向,但使用导航可以在可组合级别指定方向?

【问题讨论】:

    标签: android android-jetpack-compose android-jetpack android-jetpack-navigation


    【解决方案1】:

    您可以从LocalContext 获取当前活动,然后更新requestedOrientation

    要在屏幕出现时设置所需的方向并在屏幕消失时将其恢复,请使用DisposableEffect

    @Composable
    fun LockScreenOrientation(orientation: Int) {
        val context = LocalContext.current
        DisposableEffect(Unit) {
            val activity = context.findActivity() ?: return@DisposableEffect onDispose {}
            val originalOrientation = activity.requestedOrientation
            activity.requestedOrientation = orientation
            onDispose {
                // restore original orientation when view disappears
                activity.requestedOrientation = originalOrientation
            }
        }
    }
    
    fun Context.findActivity(): Activity? = when (this) {
        is Activity -> this
        is ContextWrapper -> baseContext.findActivity()
        else -> null
    }
    

    用法:

    @Composable
    fun Screen() {
        LockScreenOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-21
      • 2023-03-07
      • 1970-01-01
      • 2014-05-18
      • 2021-09-02
      • 2015-12-30
      相关资源
      最近更新 更多