Android Hello World应用如何恢复默认导航栏及调整窗口布局
Android Hello World应用导航栏相关问题解决
问题背景
在小米Redmi Note 5 Pro(API Level=28)上测试以下Hello World应用代码,运行后出现导航按键消失、右下角显示全屏图标的情况,需解决三个技术问题:
- 三个导航按键为何消失?
- 右下角的全屏图标是什么?
- 如何让应用窗口处于状态栏与导航栏之间?
应用代码
MainActivity.java
package com.example.test; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; import android.view.ViewGroup.LayoutParams; import android.widget.LinearLayout; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView txt = new TextView(this); txt.setLayoutParams(new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT )); txt.setText("Hello, world!"); LinearLayout lay = new LinearLayout(this); lay.setLayoutParams(new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT )); lay.addView(txt); setContentView(lay); } }
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.test" versionCode="1" versionName="0.1"> <uses-sdk android:minSdkVersion="21"/> <application android:label="test"> <activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>
运行效果

问题解答
1. 三个导航按键为何消失?
你的应用默认进入了全屏显示模式。在Android 8.0+(API 26+)设备上,当Activity的根布局设置为MATCH_PARENT占满屏幕时,系统(尤其是小米MIUI这类定制ROM)会自动隐藏导航栏,让应用占据整个屏幕空间。加上你的代码没有明确指定窗口的显示模式,系统默认触发了全屏适配逻辑,导致导航按键被隐藏。
2. 右下角的全屏图标是什么?
这是小米MIUI系统的显示模式切换快捷按钮,点击后可在「全屏隐藏导航栏」「显示导航栏的常规模式」「手势导航模式」之间切换,是MIUI为全屏应用提供的快速调整显示方式的入口。
3. 如何让应用窗口处于状态栏与导航栏之间?
提供三种可行方案:
方案1:配置Activity主题
在AndroidManifest.xml的Activity标签中添加系统默认非全屏主题,让系统自动保留状态栏和导航栏:<activity android:name=".MainActivity" android:exported="true" android:theme="@android:style/Theme.Material.Light">方案2:代码中禁用全屏模式
在MainActivity的onCreate方法、super.onCreate(savedInstanceState);之后添加以下代码,清除全屏标记并恢复系统UI可见性:getWindow().clearFlags(android.view.WindowManager.LayoutParams.FLAG_FULLSCREEN); getWindow().getDecorView().setSystemUiVisibility(android.view.View.SYSTEM_UI_FLAG_VISIBLE);方案3:设置布局适配系统窗口
给代码创建的根LinearLayout添加fitsSystemWindows属性,确保布局不会延伸到状态栏和导航栏下方:lay.setFitsSystemWindows(true);
内容的提问来源于stack exchange,提问作者dawnmenu
相关产品推荐
相关产品推荐

