在android kitkat中使用新的IMMERSIVE模式

Sae*_*ani 22 android android-view android-4.4-kitkat

我想让一个活动进入IMMERSIVE模式并在它启动时隐藏顶部和底部系统栏.

在android开发者网站上,他们说我应该使用setSystemUiVisibility()并提供SYSTEM_UI_FLAG_IMMERSIVESYSTEM_UI_FLAG_HIDE_NAVIGATION.

我怎么能OnCreate()在活动的方法中这样做?我认为setSystemUiVisibilityActivity类中没有提供它,它应该在视图中发生.有解决方法吗?

UPDATE

确定根据门把我添加了以下行,但我没有看到任何更改,导航栏和按钮按钮仍然可见:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (savedInstanceState == null) {
        }
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE);
    }

    //Rest of activity code
Run Code Online (Sandbox Code Playgroud)

doo*_*uck 45

获取装饰视图:

getWindow().getDecorView().setSystemUiVisibility(...)
Run Code Online (Sandbox Code Playgroud)

请记住,参数是位标志.只调用上面的方法一次:

getWindow().getDecorView().setSystemUiVisibility(
          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
        | View.SYSTEM_UI_FLAG_IMMERSIVE);
Run Code Online (Sandbox Code Playgroud)

  • 是否可以从Android风格设置所有这个标志,所以我不必从我的活动中调用它?那么我可以为Android的不同版本设置不同的样式吗? (3认同)
  • 我的应用程序使用webview,因此我必须使用.getRootView()而不是.getDecorView()才能使其工作. (3认同)

swi*_*der 5

Chris Banes的主要内容展示了一个很好的Helper类,我们可以用它来为HoneyComb到Lollipop的所有版本设置沉浸式模式https://gist.github.com/chrisbanes/73de18faffca571f7292.

更新:我尝试从他的github repo中获取它以包含在我的项目中,但我必须将gist文件克隆到我的项目中并调整packagename.如果有人知道如何正确地将其作为依赖项包含在内,那么欢迎您帮助我.

我在我的FullScreenActivity中添加了它,我想使用ImmersiveStickyMode,如下所示:

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

        final int flags = 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
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;

        SystemUiHelper uiHelper =  new SystemUiHelper(this, SystemUiHelper.LEVEL_IMMERSIVE ,flags);
        uiHelper.hide();



}
Run Code Online (Sandbox Code Playgroud)

  • @swisscoder我创建了一个github项目,允许你将它用作Gradle依赖项:https://github.com/intrications/SystemUiHelper (2认同)