Android官方开发文档Training系列课程中文版:管理系统UI之隐藏状态条

来源:互联网 发布:aim软件 编辑:程序博客网 时间:2024/05/16 11:05

原文地址:http://android.xsoftlab.net/training/system-ui/status.html

这节课将会介绍如何隐藏不同的版本的状态条。隐藏状态条可以使内容展示区域更大,因此可以提供一种更强的身临其境的用户体验。

含有状态条的APP:

隐藏状态条的APP,注意这里的ActionBar同样也隐藏了。绝不要在没有状态条的时候还显示ActionBar:

在Android 4.0以下的版本中隐藏状态条

开发者可以通过设置WindowManager的标志来隐藏Android 4.0之前的状态条。除此之外在清单文件中设置Activity的主题也可以达到同样的效果。如果需要状态条一直保持隐藏状态,那么在清单文件中设置主题是我们的首选方式:

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

使用Activity主题的优势在于:

  • 相对于动态设置来说更易于维护也减小了出错的风险。
  • 这会使得UI转场更加平滑,因为系统在实例化Activity之前J就已经得到了它需要的UI渲染信息(状态条隐藏等等)。

开发者可以通过设置WindowManager的标志来达到同样的目的。这种方法适合用户与APP交互的时候使用。

public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        // If the Android version is lower than Jellybean, use this call to hide        // the status bar.        if (Build.VERSION.SDK_INT < 16) {            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,                    WindowManager.LayoutParams.FLAG_FULLSCREEN);        }        setContentView(R.layout.activity_main);    }    ...}

当你设置了WindowManager标志(不论是通过Activity的主题还是动态的设置),那么该标志则会一直保留,直到将该标志移除。

在Android 4.1以上的版本中隐藏状态条

你可以通过使用setSystemUiVisibility()方法隐藏Android 4.1以上系统的状态条。setSystemUiVisibility()为单个的View层级设置了UI标志;这些设置被整合进了Window层级。setSystemUiVisibility()比WindowManager的控制粒度更细。下面的代码隐藏了状态条:

View decorView = getWindow().getDecorView();// Hide the status bar.int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;decorView.setSystemUiVisibility(uiOptions);// Remember that you should never show the action bar if the// status bar is hidden, so hide that too if necessary.ActionBar actionBar = getActionBar();actionBar.hide();

要注意以下几个方面:

  • 一旦UI的标志被清除(比如,通过导航的方式离开了Activity),那么如果你想重新隐藏状态条的话则需要重新设置这些标志。
  • 在不同的地方设置UI标志还有些差异。如果在Activity的onCreate()方法中隐藏了系统条,这时用户返回了桌面,那么系统条则会再次出现。当用户重新打开Activity时,onCreate()不会被再次调用,所以系统条会一直保持可见。如果你想使系统条还保持原来的状态的话,则需要在onResume()中或onWindowFocusChanged()中设置相应的标志。
  • setSystemUiVisibility()只有在View可见的时候设置才有效。
  • 由导航的方式离开View会使由setSystemUiVisibility()设置的标志被清除。

使内容显示在状态条的后面

在Android 4.1以上的版本中,你可以将应用的内容区域显示在状态条的后面,所以内容区域的尺寸并不会随着状态条的隐藏显示而变化。通过使用SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN标志来实现这一点。你可能还需要使用SYSTEM_UI_FLAG_LAYOUT_STABLE标志来辅助APP维持一个稳定的布局状态。

当你使用了这项方法,那么你就有责任确保APP UI的边界部分不会被系统条所遮盖。在很多情况下,你可以通过在布局文件中添加android:fitsSystemWindows=true属性来处理这种情况。它会调整父ViewGroup的内边距来留出系统窗口的空间,这种方法足以应对大多数的应用。

随着ActionBar的变换同步状态条

在Android 4.1以上的版本中,为了避免重新调整布局的尺寸,当ActionBar显示或隐藏时,你可以开启ActionBar的Overlay Mode。当处于Overlay Mode下时,Activity的布局会使用所有的可用空间,就仿佛ActionBar不存在一样,系统会将ActionBar绘制在布局的上面一层。这会使布局顶部的部分变的模糊,不过当ActionBar显示或者隐藏时,系统并不会重写调整布局的尺寸,这会使得转场过程无缝对接。

为了可以使ActionBar开启Overlay Mode,你需要创建一个自定义主题,并需要继承已有的携带ActionBar的主题,并需要将android:windowActionBarOverlay属性设置为true即可。

0 0
原创粉丝点击