android中的沉浸模式,只有透明度

时间:2014-02-28 19:12:34

标签: android transparency android-fullscreen

我想在我的应用中使用“沉浸式模式”。 我正在关注文档并正常工作:

 private View mDecorView;
...

     @Override
        public void onWindowFocusChanged(boolean hasFocus) {
            super.onWindowFocusChanged(hasFocus);
            if (hasFocus) {
                mDecorView.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_STICKY);
            }
        }
...
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test);
        mDecorView = getWindow().getDecorView();

    }

这可实现沉浸式全屏模式。 我的问题是我只想使用FLAG_IMMERSIVE_STICKY,与Trello应用程序的结果相同:

enter image description here

条形图是透明的,始终可见。 我搜索了信息和不同的组合,但我得到了我想要的结果。 我感谢任何帮助。

谢谢!

3 个答案:

答案 0 :(得分:2)

Trello正在使用半透明条[1],而不是沉浸式模式,具有自定义透明动作条背景。

[1] https://developer.android.com/about/versions/android-4.4.html#TranslucentBars

答案 1 :(得分:0)

您正在寻找的标志是:

  • WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
  • WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION

您还可以使用主题中的标志:

<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>

不幸的是,如果您的应用使用操作栏,它就不会立即显示为Trello应用。你将不得不使用一些技巧/黑客使它看起来像Trello应用程序。如果您的应用使用操作栏,您可以节省时间并使用this library代替*。不用说,这只适用于API 19 +。

* 就个人而言,我并不认可使用透明系统条只是为了扩展动作条颜色。我觉得只有在系统栏下方显示内容或者您有全屏活动时才应该使用它。

答案 2 :(得分:0)

该文档还指出您必须在onCreate方法中为活动设置UI标志。 - https://developer.android.com/training/system-ui/immersive.html

实现这两个方法并在onCreate方法中调用hideSystemUI

// This snippet hides the system bars.
private void hideSystemUI() {
    // Set the IMMERSIVE flag.
    // Set the content to appear under the system bars so that the content
    // doesn't resize when the system bars hide and show.
    mDecorView.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 // hide nav bar
            | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
            | View.SYSTEM_UI_FLAG_IMMERSIVE);
}

// This snippet shows the system bars. It does this by removing all the flags
// except for the ones that make the content appear under the system bars.
private void showSystemUI() {
    mDecorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}

这应该隐藏statusBar和navigationBar。 文档说明这应该隐藏导航和状态栏。 对我来说它只是隐藏了StatusBar。

我希望这会有所帮助。