【问题标题】:Hide Statusbar in fragment在片段中隐藏状态栏
【发布时间】:2017-12-18 06:39:03
【问题描述】:

我正在尝试在片段中隐藏状态栏。 我已成功隐藏工具栏,但我也只想在一个片段中隐藏状态栏..

  @Override
    public void onCreate(Bundle arg0) {
        super.onCreate(arg0);

   // requestWindowFeature(Window.FEATURE_NO_TITLE);

        ((HomeActivity)getActivity()).getSupportActionBar().hide();
    }

上面的代码可以很好地隐藏工具栏

  requestWindowFeature(Window.FEATURE_NO_TITLE);

如果我在片段onCreate 中的requestWindowFeature(如上所述)应用程序崩溃了。

在实现@Mathan Chinna 的回答后添加了三个屏幕截图

  1. 普通屏幕

  1. 在实现@Mathan Chinna 的代码后

  1. 当我从全屏返回时

【问题讨论】:

    标签: android android-fragments android-toolbar android-titlebar


    【解决方案1】:

    虽然只是从我的项目中复制粘贴,但这样您可以在片段中隐藏状态栏。

     private int currentApiVersion;       
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            getActivity().getWindow().getDecorView().setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
                    View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
            currentApiVersion = android.os.Build.VERSION.SDK_INT;
            final int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_FULLSCREEN    
                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
            if(currentApiVersion >= Build.VERSION_CODES.KITKAT) {
                getActivity().getWindow().getDecorView().setSystemUiVisibility(flags);
                final View decorView = getActivity().getWindow().getDecorView();
                decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
                    @Override
                    public void onSystemUiVisibilityChange(int visibility) {
                        if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
                            decorView.setSystemUiVisibility(flags);
                        }
                    }
                });
            }
            return inflater.inflate(R.layout.yourLayout, container, false);
        }
    

    请记住,此代码将被复制到您的 Fragment 类中,而不是任何方法中。

    是的,您可以只使用以下代码:

    getActivity().getWindow().getDecorView().setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
                    View.SYSTEM_UI_FLAG_FULLSCREEN);
    

    【讨论】:

    • 谢谢!您的代码适用于 MarshMallow .... 对于我对较低和较高版本的担忧,我想问你...这适用于 15 api 到 27 api 吗?
    • 以及如何再次显示 statusBar?我无法再展示另一个片段。看看我编辑过的三张照片
    • 当我使用您建议的代码时,我得到一个灰色的状态栏。不是全屏图像..
    • 是的,我的状态栏也是灰色的
    • 对我不起作用(API 30)它使状态栏变白
    【解决方案2】:

    @Lalit Singh Fauzdar 对隐藏 statusBar 的回答是正确的。如果你想显示状态栏,你可以使用

    View decorView = getActivity().getWindow().getDecorView(); // Hide the status bar.
    int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
    decorView.setSystemUiVisibility(uiOptions);
    

    【讨论】:

      【解决方案3】:

      希望这段代码对你有更多帮助..

      来自活动...

      public class MainActivity extends AppCompatActivity{
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
      
         // YOUR FRAGMENT
         FragmentManager fragmentManager = getSupportFragmentManager();
         FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
         fragmentTransaction.replace(R.id.fragment_container, fragment,fragment.toString());
         fragmentTransaction.commit();
      
          }
      public void HideStatusBar() {
         this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        }
      public void ShowStatusBar() {
          this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        }
      }
      

      来自片段..

      public class FragmentOne extends Fragment{
      
      private Activity mActivity;
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
      
      
       ((MainActivity) getActivity()).HideStatusBar();
         }
      @Override
      public void onAttach(Activity activity) {
          super.onAttach(activity);
          this.mActivity = activity;
      
      }
      @Override
      public void onDetach() {
          super.onDetach();
          this.mActivity = null;
      }
      @Override
      public void onDestroyView() {
          super.onDestroyView();
          if (mActivity!=null){
             ((MainActivity) getActivity()).ShowStatusBar();
          }
      }
       }
      

      【讨论】:

      • HideStatusBar() 我必须从片段 onCreate 中调用此方法?
      • 如果您认为我的回答对您有帮助,请考虑采纳。谢谢!
      • 你的代码只隐藏了actionbar ..... 而这件事我可以通过.getActionBar().hide();
      猜你喜欢
      • 2023-03-06
      • 2016-01-10
      • 1970-01-01
      • 2011-04-29
      • 2015-11-11
      • 2016-10-04
      相关资源
      最近更新 更多