Android Studio 全屏沉浸式透明状态栏效果的实现
如何实现?1.)首先实现全屏
第一种:继承主题特定主题
在AndroidAPI19以上可以使用****.TranslucentDecor***有关的主题,自带相应半透明效果,Theme.Holo.NoActionBar.TranslucentDecor和Theme.Holo.Light.NoActionBar.TranslucentDecor两种主题为新增加的,所以要新建values-v19文件夹并创建styles文件添加如下代码
第二种:在activity中采用代码的方式
Android4.4以上可以添加如下代码
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.KITKAT){
//透明状态栏
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//透明导航栏
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}
Android5.0以上也可以使用下面的代码实现全屏
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP){
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
|WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
|View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
}
2.)解决状态栏占位问题
第一种:主题添加如下设置
true 
第二种:activitylayout根目录添加下面代码
android:fitsSystemWindows="true"
第三种:通过Java代码设置
rootview.setFitsSystemWindows(true);
3.)状态栏导航栏设置背景色
4.4以上的可以采用修改contentView的背景色,或者动态添加一个view到contentView上
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.KITKAT){
//透明状态栏
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//透明导航栏
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
//设置contentview为fitsSystemWindows
ViewGroupcontentView=(ViewGroup)findViewById(android.R.id.content);
ViewchildAt=contentView.getChildAt(0);
if(childAt!=null){
childAt.setFitsSystemWindows(true);
}
//给statusbar着色
Viewview=newView(this);
view.setLayoutParams(newViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,getStatusBarHeight(this)));
view.setBackgroundColor(color);
contentView.addView(view);
}
动态获取StatusBarHeight函数如下
/**
*获取状态栏高度
*
*@paramcontextcontext
*@return状态栏高度
*/
privatestaticintgetStatusBarHeight(Contextcontext){
//获得状态栏高度
intresourceId=context.getResources().getIdentifier("status_bar_height","dimen","android");
returncontext.getResources().getDimensionPixelSize(resourceId);
}
动态获取NavigationBarHeight函数如下
/**
*获取导航栏高度
*
*@paramcontextcontext
*@return导航栏高度
*/
publicstaticintgetNavigationBarHeight(Contextcontext){
intresourceId=context.getResources().getIdentifier("navigation_bar_height","dimen","android");
returncontext.getResources().getDimensionPixelSize(resourceId);
}
4.)贴出整体java代码实现方式
privatevoidinitWindows(){
Windowwindow=getWindow();
intcolor=getResources().getColor(R.color.wechatBgColor);
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP){
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
|WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
|View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
//设置状态栏颜色
window.setStatusBarColor(color);
//设置导航栏颜色
window.setNavigationBarColor(getResources().getColor(R.color.footerBgColor));
ViewGroupcontentView=((ViewGroup)findViewById(android.R.id.content));
ViewchildAt=contentView.getChildAt(0);
if(childAt!=null){
childAt.setFitsSystemWindows(true);
}
}elseif(Build.VERSION.SDK_INT>=Build.VERSION_CODES.KITKAT){
//透明状态栏
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//透明导航栏
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
//设置contentview为fitsSystemWindows
ViewGroupcontentView=(ViewGroup)findViewById(android.R.id.content);
ViewchildAt=contentView.getChildAt(0);
if(childAt!=null){
childAt.setFitsSystemWindows(true);
}
//给statusbar着色
Viewview=newView(this);
view.setLayoutParams(newViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,getStatusBarHeight(this)));
view.setBackgroundColor(color);
contentView.addView(view);
}
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M&&useStatusBarColor){//android6.0以后可以对状态栏文字颜色和图标进行修改
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
}
到此这篇关于AndroidStudio全屏沉浸式透明状态栏效果的文章就介绍到这了,更多相关AndroidStudio全屏沉浸式透明状态栏内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!