代码之家  ›  专栏  ›  技术社区  ›  lizzy sam

在片段中隐藏状态栏

  •  2
  • lizzy sam  · 技术社区  · 7 年前

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

      @Override
        public void onCreate(Bundle arg0) {
            super.onCreate(arg0);
    
       // requestWindowFeature(Window.FEATURE_NO_TITLE);
    
            ((HomeActivity)getActivity()).getSupportActionBar().hide();
        }
    

    以上代码对于隐藏工具栏工作正常

      requestWindowFeature(Window.FEATURE_NO_TITLE);
    

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

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

    1. 正常屏幕

    Normal Screen

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

    code from mathan chinna

    1. 当我从全屏回来时

    When I come back from full screen

    3 回复  |  直到 5 年前
        1
  •  8
  •   Lalit Fauzdar    7 年前

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

     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);
        }
    

    请记住,此代码将在片段类中复制,而不是在任何方法中复制。

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

    getActivity().getWindow().getDecorView().setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
                    View.SYSTEM_UI_FLAG_FULLSCREEN);
    
        2
  •  3
  •   Birju Vachhani    4 年前

    @LalitSingh Fauzdar对隐藏状态栏的回答是正确的。如果要显示状态栏,可以使用

    View decorView = getActivity().getWindow().getDecorView(); // Hide the status bar.
    int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
    decorView.setSystemUiVisibility(uiOptions);
    
        3
  •  -2
  •   Mathan Chinna    7 年前

    我希望这段代码对您有更多帮助。。

    来自活动。。。

    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();
        }
    }
     }