android - 如何在 Jetpack Compose 中强制某些屏幕的方向?

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

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

最佳答案

您可以从 LocalContext 获取当前 Activity ,然后更新 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)
}

关于android - 如何在 Jetpack Compose 中强制某些屏幕的方向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69230049/

相关文章:

Android Jetpack 撰写从图像旁边开始并在图像下方继续的文本

android - 将 Jetpack Compose 升级到 1.0.0-beta07 后出现 java.lang.NoSuchMethodError

android - 如何处理 NavController 目的地变化?

android - 在android中自定义默认光标移动器的颜色

安卓原始查询

android - 如何构建 Jetpack Compose 项目?

android - 如何使用 Jetpack 导航组件从 ViewPager 的 fragment 导航到其他 fragment ?

android - 使用bottomNavView时如何在 fragment 之间传递数据

android - 升级到 FirebaseUI 3.0 后无法使用 FirebaseRecyclerOptions 检索数据

java - 我应该如何在 Android Studio 3.0.1 中导出到 zip 文件