【发布时间】:2021-09-17 22:24:51
【问题描述】:
使用 jetpack compose 导航,我想它可能会成为一个单一的活动应用程序。如何仅对某些可组合项(屏幕)强制定向?说我是否只想在播放视频而不是其他屏幕时强制横向?如果没有导航,可以在清单中声明方向,但使用导航可以在可组合级别指定方向?
【问题讨论】:
标签: android android-jetpack-compose android-jetpack android-jetpack-navigation
使用 jetpack compose 导航,我想它可能会成为一个单一的活动应用程序。如何仅对某些可组合项(屏幕)强制定向?说我是否只想在播放视频而不是其他屏幕时强制横向?如果没有导航,可以在清单中声明方向,但使用导航可以在可组合级别指定方向?
【问题讨论】:
标签: android android-jetpack-compose android-jetpack android-jetpack-navigation
您可以从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)
}
【讨论】: