Android 永久隐藏导航栏,系统栏的方法

本文介绍了一种通过命令行操作来实现系统栏显示与隐藏的方法。该方法适用于不同版本的Android系统,并针对四核平板设备进行了特别适配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 文章来自:http://blog.csdn.net/moliyll/article/details/41945083

  2. public void showSystembar(boolean makeVisible) {  
  3.        checkInitialized();  
  4.        try {  
  5.            // get the existing environment  
  6.            ArrayList<String> envlist = new ArrayList<String>();  
  7.            Map<String, String> env = System.getenv();  
  8.            for (String envName : env.keySet()) {  
  9.                envlist.add(envName + "=" + env.get(envName));  
  10.            }  
  11.            String[] envp = (String[]) envlist.toArray(new String[0]);  
  12.            // depending on makeVisible, show or hide the bar  
  13.            if (makeVisible) {  
  14.                Log.v(TAG, "showBar will show systembar");  
  15.                // execute in correct environment  
  16.                String command;  
  17.                Device dev = Device.getInstance();  
  18.                if (dev.getAndroidVersion() == AndroidVersion.HC) {  
  19.                    command = "LD_LIBRARY_PATH=/vendor/lib:/system/lib am startservice -n com.android.systemui/.SystemUIService";  
  20.                //The four nucleus Tablet hide or display systemui  
  21.                } else if(dev.getAndroidVersion() == AndroidVersion.JELLYBEAN4_2) {  
  22.                    command = "su -c am startservice -n com.android.systemui/.SystemUIService ";  
  23.                //The four nucleus Tablet hide or display systemui  
  24.                } else {  
  25.                    command = "rm /sdcard/hidebar-lock\n"  
  26.                            + "sleep 5\n"  
  27.                            + "LD_LIBRARY_PATH=/vendor/lib:/system/lib am startservice -n com.android.systemui/.SystemUIService";  
  28.                }  
  29.                //The four nucleus Tablet hide or display systemui  
  30.                if(dev.getAndroidVersion() == AndroidVersion.JELLYBEAN4_2) {  
  31.                 Runtime.getRuntime().exec(command);  
  32.                } else{  
  33.                  Runtime.getRuntime().exec(new String[] { "su""-c", command }, envp);   
  34.                }  
  35.                //The four nucleus Tablet hide or display systemui  
  36.                // no proc.waitFor();  
  37.                // we just shown the bar, set flag to visible  
  38.                mSystembarVisible = true;  
  39.            } else {  
  40.                Log.v(TAG, "showBar will hide the systembar");  
  41.                // execute in correct environment  
  42.                String command;  
  43.                Device dev = Device.getInstance();  
  44.                if (dev.getAndroidVersion() == AndroidVersion.HC) {  
  45.                    command = "LD_LIBRARY_PATH=/vendor/lib:/system/lib service call activity 79 s16 com.android.systemui";  
  46.                //The four nucleus Tablet hide or display systemui  
  47.                } else if(dev.getAndroidVersion() == AndroidVersion.JELLYBEAN4_2) {  
  48.                    command = "su -c service call activity 42 s16 com.android.systemui";  
  49.                //The four nucleus Tablet hide or display systemui  
  50.                } else {  
  51.                    command = "touch /sdcard/hidebar-lock\n"  
  52.                            + "while [ -f /sdcard/hidebar-lock ]\n"  
  53.                            + "do\n"  
  54.                            + "killall com.android.systemui\n"  
  55. /                            + "sleep 1\n"  
  56.                            + "usleep 500000\n"  
  57.                            + "done\n"  
  58.                            + "LD_LIBRARY_PATH=/vendor/lib:/system/lib am startservice -n com.android.systemui/.SystemUIService";  
  59.                }  
  60.                //The four nucleus Tablet hide or display systemui  
  61.                if(dev.getAndroidVersion() == AndroidVersion.JELLYBEAN4_2) {  
  62.                 Runtime.getRuntime().exec(command);  
  63.                } else{  
  64.                  Runtime.getRuntime().exec(new String[] { "su""-c", command }, envp);   
  65.                }  
  66.                //The four nucleus Tablet hide or display systemui  
  67.                // no proc.waitFor();  
  68.                // we just hide the bar, set flag to not visible  
  69.                mSystembarVisible = false;  
  70.            }  
  71.        } catch (Exception e) {  
  72.            e.printStackTrace();  
  73.        }  
  74.    }  
<think>我们被要求回答如何在Android隐藏状态栏。根据提供的引用,我们可以总结出几种方法。注意:引用中提到了不同的方法,包括设置全屏显示、沉浸式模式,以及使用`View.SYSTEM_UI_FLAG_FULLSCREEN`等。我们将按照以下步骤组织回答:1.使用全屏标志(最简单的隐藏状态栏方法)2.沉浸式模式(更高级的隐藏,同时隐藏导航栏)3.在对话框(Dialog)中隐藏状态栏4.在特定版本中的注意事项注意:隐藏状态栏后,通常也需要隐藏ActionBar(如果使用了)。根据引用[1]:隐藏状态栏的操作流程包括设置全屏显示、隐藏状态栏、设置沉浸式模式。引用[2]:提到了沉浸式状态栏状态栏颜色的设置。引用[3]:给出了Kotlin代码示例,使用`View.SYSTEM_UI_FLAG_FULLSCREEN`来隐藏状态栏,并建议同时隐藏ActionBar。引用[4]:提到了通过设置`systemUiVisibility`来控制导航栏状态栏。因此,我们可以提供以下方法方法1:在Activity中设置全屏(隐藏状态栏方法2:沉浸式模式(用户滑动时可以暂时显示状态栏导航栏,然后自动隐藏方法3:在对话框(Dialog)中隐藏状态栏(引用[3]提到了在Dialog中隐藏状态栏的代码)另外,不同Android版本可能有不同的实现方式,但这里我们主要介绍通用的方法。下面开始回答:</think>### 如何在Android隐藏状态栏Android开发中隐藏状态栏主要有以下几种方法,根据应用场景和需求选择合适的方式: --- #### **1. 全屏模式(最简单方法)** 通过设置窗口标志位实现永久隐藏状态栏: ```java // Activity的onCreate方法中 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 隐藏状态栏(API 16+) getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_main); } ``` ```kotlin // Kotlin等价实现 window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN) ``` > **注意**:此方法会使状态栏完全消失,用户无法通过滑动召回[^1]。 --- #### **2. 沉浸式模式(推荐)** 允许临时显示状态栏,用户交互后自动隐藏(API 19+): ```java View decorView = getWindow().getDecorView(); int flags = View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(flags); ``` ```kotlin // Kotlin实现(引用[3]) window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN actionBar?.hide() // 同步隐藏ActionBar ``` **特性**: - 用户下滑屏幕顶部可临时显示状态栏 - 自动恢复全屏状态 - 需配合隐藏ActionBar使用[^3] --- #### **3. 主题配置(XML方式)** 在`styles.xml`中定义全屏主题: ```xml <style name="FullScreenTheme" parent="Theme.AppCompat"> <item name="windowNoTitle">true</item> <item name="windowActionBar">false</item> <item name="android:windowFullscreen">true</item> </style> ``` 在`AndroidManifest.xml`中应用主题: ```xml <activity android:name=".MainActivity" android:theme="@style/FullScreenTheme"/> ``` --- #### **4. 对话框(Dialog)全屏处理** 隐藏对话框中的状态栏(引用[3][4]): ```kotlin dialog.window?.apply { decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) } ``` --- #### **版本注意事项** | Android版本 | 推荐方法 | |-------------------|-----------------------------| | API 16 (Jelly Bean) | `FLAG_FULLSCREEN` | | API 19 (KitKat) | `SYSTEM_UI_FLAG_IMMERSIVE` | | API 21 (Lollipop)+ | 结合`WindowInsetsController` | > **关键点**:隐藏状态栏后需确保内容区域不会与系统UI重叠,可通过`fitsSystemWindows="true"`属性调整布局[^4]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值