android 状态栏透明 android设置状态栏图片

前言原来做的效果 。如下图(顶部有一条明显的橙色状态栏):

android 状态栏透明 android设置状态栏图片

文章插图

android 状态栏透明 android设置状态栏图片

文章插图
【android 状态栏透明 android设置状态栏图片】改过之后(顶部状态栏是透明的):
android 状态栏透明 android设置状态栏图片

文章插图

android 状态栏透明 android设置状态栏图片

文章插图
我发现网上写的一些文章 。不够简洁明了 。我整理了一下 。复制粘贴一下就可以在项目中运用 。
首先 。在你的Activity中添加下面四个方法(或者封装在一个工具类中)
/***全透状态栏*/protectedvoidsetStatusBarFullTransparent(){if(Build.VERSION.SDK_INT>=21){//21表示5.0Windowwindow=getWindow();window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_STABLE);window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);window.setStatusBarColor(Color.TRANSPARENT);}elseif(Build.VERSION.SDK_INT>=19){//19表示4.4getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//虚拟键盘也透明//getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);}}/***半透明状态栏*/protectedvoidsetHalfTransparent(){if(Build.VERSION.SDK_INT>=21){//21表示5.0ViewdecorView=getWindow().getDecorView();intoption=View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_STABLE;decorView.setSystemUiVisibility(option);getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);}elseif(Build.VERSION.SDK_INT>=19){//19表示4.4getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//虚拟键盘也透明//getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);}}/***如果需要内容紧贴着StatusBar*应该在对应的xml布局文件中 。设置根布局fitsSystemWindows=true 。*/privateViewcontentViewGroup;protectedvoidsetFitSystemWindow(booleanfitSystemWindow){if(contentViewGroup==null){contentViewGroup=((ViewGroup)findViewById(android.R.id.content)).getChildAt(0);}contentViewGroup.setFitsSystemWindows(fitSystemWindow);}/***为了兼容4.4的抽屉布局->透明状态栏*/protectedvoidsetDrawerLayoutFitSystemWindow(){if(Build.VERSION.SDK_INT==19){//19表示4.4intstatusBarHeight=getStatusHeight(this);if(contentViewGroup==null){contentViewGroup=((ViewGroup)findViewById(android.R.id.content)).getChildAt(0);}if(contentViewGroupinstanceofDrawerLayout){DrawerLayoutdrawerLayout=(DrawerLayout)contentViewGroup;drawerLayout.setClipToPadding(true);drawerLayout.setFitsSystemWindows(false);for(inti=0;i<drawerLayout.getChildCount();i++){Viewchild=drawerLayout.getChildAt(i);child.setFitsSystemWindows(false);child.setPadding(0,statusBarHeight,0,0);}}}}
然后 。在Activity的onCreate()方法中调用即可 。示例如下:
Activity:
publicclassTestActivityextendsappCompatActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_test);setHalfTransparent();setFitSystemWindow(false);}protectedvoidsetHalfTransparent()...protectedvoidsetStatusBarFullTransparent()...protectedvoidsetFitSystemWindow()...protectedvoidsetDrawerLayoutFitSystemWindow()...}
布局文件:
<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutandroid:id="@+id/drawerLayout"xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/bg_start"><Buttonandroid:id="@+id/button"android:layout_width="100dp"android:layout_height="40dp"android:layout_marginLeft="50dp"android:background="#F86254"android:text="button"android:textColor="@color/white"/></LinearLayout>
1.未做任何设置可见 。Android5.0以上由于默认是Material Design 。顶部是蓝色状态栏 。而5.0以下 。默认都是黑色 。而且无法修改 。
android 状态栏透明 android设置状态栏图片

文章插图

android 状态栏透明 android设置状态栏图片

文章插图
2.半透明状态栏,fitSystemWindows=false@Overridepublicvoidinit(BundlesavedInstanceState){setHalfTransparent();setFitSystemWindow(false);}
android 状态栏透明 android设置状态栏图片

文章插图

android 状态栏透明 android设置状态栏图片

文章插图
可见 。5.0以上蓝色状态栏没了 。变成了半透明的黑色 。而内容区域则有了全屏的效果 。

推荐阅读