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

能否在Activity横屏布局的XML文件中隐藏导航栏?

关于横屏布局中隐藏导航栏的问题

没法直接通过布局文件单独配置横屏时隐藏导航栏——布局文件的核心作用是定义UI组件的排布规则,而系统导航栏的显示/隐藏属于窗口级别的系统配置,这类配置要么通过主题全局控制,要么通过代码调用窗口管理API动态调整。

替代方案1:横竖屏差异化主题配置

AppCompat主题本身没有“仅横屏隐藏导航栏”的专属属性,但可以通过横竖屏对应的资源目录实现主题差异化:

  1. 在项目res目录下创建values-land文件夹(专门存放横屏模式的资源)
  2. 默认values/styles.xml中保留竖屏主题配置(导航栏正常显示):
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- 竖屏模式下的主题属性 -->
</style>
  1. 在values-land/styles.xml中重写主题,添加隐藏导航栏的配置:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- 仅横屏时隐藏导航栏(API 19+生效) -->
    <item name="android:windowNavigationBarHidden">true</item>
    <!-- 若需同时隐藏状态栏,可添加此行 -->
    <!-- <item name="android:windowFullscreen">true</item> -->
</style>

这种方式会让Activity在横屏时自动应用隐藏导航栏的主题,竖屏时恢复正常。

替代方案2:代码动态控制(更灵活)

如果不想修改全局主题,只想针对横屏场景精准控制,用代码实现会更细腻:

  1. 在AndroidManifest.xml中给目标Activity添加配置,避免横竖屏切换时重建Activity:
<activity
    android:name=".MainActivity"
    android:configChanges="orientation|screenSize">
</activity>
  1. 在MainActivity中重写onConfigurationChanged方法,监听横竖屏切换并控制导航栏:
@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    View decorView = getWindow().getDecorView();
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        // 横屏时隐藏导航栏,STICKY参数实现沉浸式(用户滑动临时显示后自动隐藏)
        int uiFlags = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
        decorView.setSystemUiVisibility(uiFlags);
    } else {
        // 竖屏时恢复导航栏显示
        decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
    }
}

内容的提问来源于stack exchange,提问作者Semyon Kuragin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:35:23