【问题标题】:How to hide status bar in android in just one activity如何在一项活动中隐藏android中的状态栏
【发布时间】:2017-03-23 06:19:21
【问题描述】:

我想在我正在使用的闪屏中隐藏状态栏/通知栏 风格:<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 这并没有隐藏状态栏,我该怎么做?

【问题讨论】:

标签: android android-styles


【解决方案1】:

如果要移除状态栏,请在 onCreateView 方法中的 setContentView(layout) 之前使用它

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
    WindowManager.LayoutParams.FLAG_FULLSCREEN);

credits

【讨论】:

  • 如果你想重新添加它,请使用 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)。
  • @Kharda 谢谢你的帮助
【解决方案2】:

您可以执行以下操作以适当地为您的特定活动设置主题 -

<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:windowBackground">@drawable/launch_theme</item>
        <item name="android:windowTranslucentNavigation">false</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowActionBar">true</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowDrawsSystemBarBackgrounds">false</item>
 </style>

【讨论】:

  • 非常感谢,如果您想避免在绘制视图后隐藏状态栏动画,这是一个非常好的方法
  • android:windowFullscreen 是在我的styles.xml 中寻找使用的东西——它对我来说非常好用,对我来说和FLAG_FULLSCREEN 一样!
【解决方案3】:

试试这个:

<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:windowFullscreen">true</item>
</style>

【讨论】:

    【解决方案4】:

    使用以下代码解决您的问题。

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //Add Below line to hide 
            getSupportActionBar().hide();
        }
    

    【讨论】:

    • 这会隐藏ActionBar,如果您使用的是样式:&lt;style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"&gt;,您的应用会崩溃
    【解决方案5】:

    试试这个完整的解决方案,向后兼容低于 android 版本 16 和向前兼容的解决方案

        if (Build.VERSION.SDK_INT < 16)
        {
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
        }
        else
        {
            View decorView = getWindow().getDecorView();
            // Hide the status bar.
            int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
            decorView.setSystemUiVisibility(uiOptions);
        }
    

    【讨论】:

      【解决方案6】:

      要使您的活动全屏显示,请将此代码添加到onCreate 之前的setContentView

      requestWindowFeature(Window.FEATURE_NO_TITLE);
      getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
      

      【讨论】:

        【解决方案7】:

        这是我用过的,效果很好。

        将此代码添加到您的活动onCreate 之前setContentView

            @Override
              protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
        
                requestWindowFeature(Window.FEATURE_NO_TITLE);
        
                this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        
            }
        

        【讨论】:

          【解决方案8】:

          对于 Kotlin 用户。

          styles.xml添加新样式:

          <style name="NoActionBarTheme" parent="Theme.AppCompat.Light.NoActionBar">
                  <item name="colorPrimary">@color/colorPrimary</item>
                  <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
                  <item name="colorAccent">@color/colorAccent</item>
              </style>
          

          现在在AndroidManifest.xml添加新创建的样式:

           <activity
                      android:name=".MainActivity"
                      android:theme="@style/NoActionBarTheme"
                      android:screenOrientation="portrait"
                      android:windowSoftInputMode="adjustResize"
          
           >...</activity>
          

          最后在MainActivity.kt做如下修改:

          override fun onCreate(savedInstanceState: Bundle?) {
                  super.onCreate(savedInstanceState)
                  setContentView(R.layout.activity_main)
          
                  //Add below line to hide status bar
                  window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN
          }
          

          现在状态栏应该消失了:

          【讨论】:

            【解决方案9】:

            如果你在主题应用中使用它

            Theme.MaterialComponents.NoActionBar

            改成

            Theme.AppCompat.NoActionBar

            并在活动中添加代码:

            fun fullScreen(activity: Activity) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
                if (activity.window.insetsController != null) {
                    val insetsController = activity.window.insetsController
                    if (insetsController != null) {
                        insetsController.hide(WindowInsets.Type.statusBars() or WindowInsets.Type.navigationBars())
                        insetsController.systemBarsBehavior =
                            WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
                    }
                }
            } else {
                activity.window.setFlags(
                    WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
                    WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
                )
            }
            

            }

            【讨论】:

              【解决方案10】:

              试试这个:

               @Override
                  protected void onCreate(Bundle savedInstanceState) {
                      super.onCreate(savedInstanceState);
              
                      requestWindowFeature(Window.FEATURE_NO_TITLE);
                      this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
                  }
              

              【讨论】:

                【解决方案11】:

                我做了一些神奇的代码。状态栏中的按钮可以点击,但是很难。 4.4 的部分效果不好。

                    /** Скрывает статус-бар */
                    private void hideStatusBar(View decorView)
                    {
                        int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
                        decorView.setSystemUiVisibility(uiOptions);
                
                        android.app.ActionBar actionBar = getActionBar();
                
                        if (actionBar != null)
                            actionBar.hide();
                    }
                
                    @Override protected void onCreate(Bundle savedInstanceState)
                    {
                            super.onCreate(savedInstanceState);
                
                            try
                            {
                                // for < 4.0
                                if (Build.VERSION.SDK_INT < 16)
                                    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
                                // for > 4.0
                                else
                                {
                                    final View decorView = getWindow().getDecorView();
                
                                    hideStatusBar(decorView);
                
                                    decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener()
                                    {
                                        @Override public void onSystemUiVisibilityChange(int visibility)
                                        {
                                            if (visibility != View.SYSTEM_UI_FLAG_FULLSCREEN)
                                                hideStatusBar(decorView);
                                        }
                                    });
                                }
                            }
                            catch (Throwable t)
                            {
                                Util.log("Ошибка при попытке свернуть статус бар");
                                t.printStackTrace();
                            }
                
                            setContentView(R.layout.activity_main);
                }
                

                【讨论】:

                  【解决方案12】:

                  如果要隐藏状态栏行和操作栏,则必须在themes.xml中更改行

                     <style name="Theme.MyApp" 
                             parent="Theme.MaterialComponents.DayNight.DarkActionBar">
                  

                     <style name="Theme.MyApp" 
                              parent="Theme.MaterialComponents.DayNight.NoActionBar">
                  

                  这是你不想要状态栏线的活动类..

                       requestWindowFeature(Window.FEATURE_NO_TITLE)
                          window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                             WindowManager.LayoutParams.FLAG_FULLSCREEN);
                  

                  请确保您必须在 onCreate() 方法中添加这些行。

                          setContentView(R.layout.activity_main)
                  

                  【讨论】:

                    猜你喜欢
                    • 2011-07-22
                    • 1970-01-01
                    • 2012-02-28
                    • 2017-10-08
                    • 1970-01-01
                    • 1970-01-01
                    • 2021-02-20
                    • 1970-01-01
                    • 2013-06-09
                    相关资源
                    最近更新 更多