正所谓具体情况具体分析
方案一:纯色的透明状态栏
解决办法:
1、将需要透明的activity页面设置为全屏,状态栏变为透明;
在mainActivity中添加如下代码:
//在setContentView语句之前放入,
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Window window = getWindow(); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); window.setStatusBarColor(Color.TRANSPARENT); }
注解:获取窗体,并将窗体的设为全屏,状态栏设为透明;这个时候mainActivity页面的状态栏就透明了,且覆盖在了页面上
2、在mainActivity.xml中加入一个自定义的伪状态栏,方法有很多,这里采用的是添加一个view来充当状态栏背景
<View android:layout_width="match_parent" android:layout_height="20px" android:background="#D43D3D" android:id="@+id/actionbar_bcg" > </View>
3、动态设置这个view的高度,因为机型不同,所以会导致状态栏的高度也不一样
//创建一个工具类,用来设置这个view的高度
public SetActionBarHeight(View v, int viewId) { View view=v.findViewById(viewId); //获取到view的布局参数 LinearLayout.LayoutParams layoutParams=(LinearLayout.LayoutParams) view.getLayoutParams(); //获取到view的actionbar的高度 int height=view.getResources().getIdentifier("status_bar_height","dimen","android"); //转化为像素值 int res=view.getResources().getDimensionPixelSize(height); //将结果赋给view的高度 layoutParams.height=res; //重新设置好布局参数 view.setLayoutParams(layoutParams); }
注解:或许还能动态设置颜色
方案二:图片透明状态栏,4行代码搞定
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow(); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); window.setStatusBarColor(Color.TRANSPARENT);
}
欢迎加入技术交流群:QQ群:864837144