android 控制系统UI可见性

调节系统栏

项目过程中或多或少需要调节系统状态栏或者需要调节系统导航栏,如下将指引如何修改

你可以通过使用 SYSTEM_UI_FLAG_LOW_PROFILE标记调节状态栏和通知栏  如下

View decorView = getWindow().getDecorView();
int options = View.SYSTEM_UI_FLAG_LOW_PROFILE;
decorView.setSystemUiVisibility(options );

在activity中调用getWindow()方法获取到window对象,接着再通过getDecorView()获取window上层的view视图

接着调用setSystemUiVisibility()相应的参数即可

如果不想设置如上的标记,可通过如下方法 进行清除标记

View decorView = getActivity().getWindow().getDecorView();
decorView.setSystemUiVisibility(0);

隐藏状态栏

1、状态栏显示

2、状态栏隐藏

android版本4.0以及4.0以下的隐藏方法

你可以通过设置application的主题样式 如下

<application
    ...
    android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" >
    ...
</application>

或者你可以通过代码实现

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      
        if (Build.VERSION.SDK_INT < 16) {
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
        }
        setContentView(R.layout.activity_main);
    }
 
}

android版本4.1以及4.1以上的隐藏方法

View decorView = getWindow().getDecorView();
int options = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(options );

// 以下为隐藏标题栏
ActionBar actionBar = getActionBar();
actionBar.hide();

android内容显示在状态栏后面

View decorView = getWindow().getDecorView();

int options = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_STABLE;

decorView.setSystemUiVisibility(options );

隐藏导航栏

你可以使用SYSTEM_UI_FLAG_HIDE_NAVIGATION标记隐藏导航栏 如下

View decorView = getWindow().getDecorView();
// 同时隐藏导航栏以及状态栏
int options = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
              | View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(options );


让内容显示在导航栏后面

View decorView = getWindow().getDecorView(); // 同时隐藏导航栏以及状态栏

int options = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE ; decorView.setSystemUiVisibility(options );

启用全屏模式

以下代码显示如何隐藏和显示活动中的状态栏和导航栏,而不根据不断变化的屏幕空间调整布局:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        hideSystemUI();
    }
}

private void hideSystemUI() {
 
    View decorView = getWindow().getDecorView();
    decorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_IMMERSIVE
            // 设置内容在状态栏下面
      
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            // 隐藏状态栏以及导航栏
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_FULLSCREEN);
}

// 显示所有系统栏通过移除所有标记
private void showSystemUI() {
    View decorView = getWindow().getDecorView();
    decorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}
原创文章 29 获赞 1 访问量 9274

猜你喜欢

转载自blog.csdn.net/qinxuexiang_blog/article/details/90734250