0

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

@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(已经提到以上)应用程序崩溃。

实现第二个答案后addded 3张图片

[正常画面] [1] [后使用您的代码工作货] [2] [当来自全屏幕的背面] [3]

[1]: https://i.stack.imgur.com/KbX4T.jpg 
    [2]: https://i.stack.imgur.com/sSWqf.jpg 
    [3]: https://i.stack.imgur.com/urJaK.jpg 

回答

0

@Lalit Singh Fauzdar回答隐藏statusBar是正确的。 如果你想显示statusBar你可以使用View decorView = getActivity().getWindow().getDecorView(); // Hide the status bar. int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE; decorView.setSystemUiVisibility(uiOptions);

+0

谢谢扩大答案.....帮我 –

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); 
+0

谢谢!你的代码适用于MarshMallow ....因为我对低等和高等版本的担心,我想问你......这个工作适用于15 api到27 api吗? –

+0

以及如何再次显示statusBar?我无法展示它另一个片段。 看到三个图片我已编辑que –

0

我希望你这个代码是帮助您更..

从活动......

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

HideStatusBar()我有从onCreate片段调用此方法? –

+0

请c我的更新代码。如果你认为我的答案对你有帮助,请考虑接受它。 –

+0

谢谢 ! –