Toolbar已经代替了actionbar,特别是在4.4或更高版本上可以有沉浸式效果,要使用Toolbar还要配置相关的Noactionbar style样式,但是如果在全屏与非全屏切换时,如何使用Toolbar并实现沉浸式样式,又要保证界面布局在全屏与非全屏时大小不会改变.
更多文章请关注:http://blog.csdn.net/u012216274
先看效果图吧, 这是4.4以下效果
4.4或更高版本效果
1:要使用Toolbar,实现沉浸式所以样式得使用Noactionbar, 并设置windowFullscreen 为true
2:Toolbar布局与设置, 这里不能使用LinearLayout,否则界面中的布局内容会在toolbar内容下面
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView android:id="@+id/iv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/piaoliupin"
android:fitsSystemWindows="true"
android:scaleType="fitXY"/>
<android.support.v7.widget.Toolbar
android:id="@+id/mToolbar"
android:layout_width="match_parent"
android:layout_height="52dp"
android:minHeight="52dp"
app:titleMarginStart="0dp"
app:contentInsetStart="0dp"
app:contentInsetRight="0dp"
app:contentInsetEnd="0dp"
android:background="?attr/colorPrimary" />
</RelativeLayout>
/**
* 由于全屏时转非全屏时界面中的布局大小不能改变,所以不能使用流行的在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