You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Compose中为单个Composable函数禁用横屏模式

为指定Composable单独锁定竖屏的实现方案

核心逻辑是利用Compose的生命周期回调,动态修改当前所属Activity的屏幕方向配置,页面退出时恢复原有配置,无需修改Manifest,也不会影响同Activity的其他Composable。

实现步骤

  1. 编写通用的屏幕方向锁定Composable工具
    通过DisposableEffect监听当前Composable的生命周期,进入组合时保存原有屏幕方向、设置为竖屏,退出组合时恢复原有配置:
import android.app.Activity
import android.content.pm.ActivityInfo
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.ui.platform.LocalContext

@Composable
fun LockScreenOrientation(orientation: Int = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
    val context = LocalContext.current
    DisposableEffect(Unit) {
        val activity = context as? Activity ?: return@DisposableEffect onDispose {}
        // 保存原有屏幕方向
        val originalOrientation = activity.requestedOrientation
        // 设置为目标方向(默认竖屏)
        activity.requestedOrientation = orientation
        onDispose {
            // 退出Composable时恢复原有配置
            activity.requestedOrientation = originalOrientation
        }
    }
}
  1. 在需要锁定竖屏的Composable中直接调用即可
@Composable
fun TargetVerticalScreen() {
    // 直接调用该函数,当前页面就会锁定为竖屏
    LockScreenOrientation()
    
    // 你的页面其他布局逻辑
    // ...
}

注意事项

  • 该配置优先级高于系统自动旋转开关,符合仅当前页面强制竖屏的需求
  • 必须保证onDispose逻辑正常执行,否则离开当前页面后Activity会保持竖屏状态
  • 如果需要锁定其他方向,可调用时传入对应的ActivityInfo.SCREEN_ORIENTATION_*常量

内容的提问来源于stack exchange,提问作者Android Newcomer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 17:48:03