android全屏与非全屏切换时Toolbar的显示,仿微信漂流瓶效果

【android全屏与非全屏切换时Toolbar的显示,仿微信漂流瓶效果】Toolbar已经代替了actionbar,特别是在4.4或更高版本上可以有沉浸式效果,要使用Toolbar还要配置相关的Noactionbar style样式,但是如果在全屏与非全屏切换时,如何使用Toolbar并实现沉浸式样式,又要保证界面布局在全屏与非全屏时大小不会改变.
更多文章请关注:http://blog.csdn.net/u012216274 先看效果图吧, 这是4.4以下效果
android全屏与非全屏切换时Toolbar的显示,仿微信漂流瓶效果
文章图片

4.4或更高版本效果
android全屏与非全屏切换时Toolbar的显示,仿微信漂流瓶效果
文章图片

1:要使用Toolbar,实现沉浸式所以样式得使用Noactionbar, 并设置windowFullscreen 为true
android全屏与非全屏切换时Toolbar的显示,仿微信漂流瓶效果
文章图片

2:Toolbar布局与设置, 这里不能使用LinearLayout,否则界面中的布局内容会在toolbar内容下面


/** * 由于全屏时转非全屏时界面中的布局大小不能改变,所以不能使用流行的在windows中添加一个 * Status 高度的控件来填充内容,直接使用toolbar设置padding效果 * @param activity * @param toolbar */ public static void setStatusBarColor(Activity activity, Toolbar toolbar) { if (toolbar.getTag() == null ) { ViewGroup.LayoutParams params = toolbar.getLayoutParams(); int statusHeight = getStatusHeight(activity); params.height += statusHeight; toolbar.setLayoutParams(params); toolbar.setPadding(toolbar.getPaddingLeft(), toolbar.getPaddingTop() + statusHeight, toolbar.getPaddingRight(), toolbar.getPaddingBottom()); toolbar.setTag(true); //toolbar默认有16dp的margin值,可以设置为0,或在布局中配置 toolbar.setContentInsetsRelative(0,0); } if (hasKitKat()) {//设置显示toolbar时的样式 activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); } }

3:最后就是些全屏与非全屏时的设置与动画
private void full(boolean enable) { if (!enable){ getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); //非全屏 mToolbar.clearAnimation(); Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.top_translate_enter); mToolbar.setAnimation(animation); ConfigUtils.setStatusBarColor(MainActivity.this, mToolbar); mToolbar.setVisibility(View.VISIBLE); animation.start(); }else{ mToolbar.clearAnimation(); Animation animation = AnimationUtils.loadAnimation(this, R.anim.top_translate_exit); mToolbar.setAnimation(animation); animation.start(); mToolbar.setVisibility(View.GONE); getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); //清除非全屏的flag getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); //设置全屏的flag } }

最后附上源码 http://download.csdn.net/detail/u012216274/9818772
更多文章请关注:http://blog.csdn.net/u012216274

    推荐阅读