频道栏目
首页 > 资讯 > Android > 正文

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

16-08-01        来源:[db:作者]  
收藏   我要投稿

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

含有状态条的APP:

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

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

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


    ...

使用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即可。

相关TAG标签
上一篇:Win7激活丨小马激活工具绿色版一键永久激活windows和office
下一篇:Android实现ListView过滤功能之继承BaseAdapter进阶版
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站