SlidingMenu实现透明状态栏

1.透明状态栏实现

   下沉式:

<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>

  全透明(5.1):
getWindow().requestFeature(Window.FEATURE_NO_TITLE);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    Window window = getWindow();
    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.TRANSPARENT);
    window.setNavigationBarColor(Color.TRANSPARENT);

  不占用statusbar:
android:fitsSystemWindows="true"
android:clipToPadding="true"

2.SlidingMenu实现透明状态栏
因为自定义view是无法实现下沉式状态栏的
SlideMenu的源码可知,SlideMenu是利用ViewGroup来作为ViewAbove和ViewBehind的容器,而这里的ViewAbove和ViewBehind就是分别代表我们的主界面布局文件和菜单布局文件。
沉浸式状态栏是仅仅支持Layout和TextView等几种控件的沉浸效果的,而且如果Layout里面的第一个控件为ImageView,沉浸效果也是无法实现的

####################################################
所以这里问题是怎么顶到屏幕最上面,那就是在slidingmenu的布局中添加一个可以顶到上层的控件(如下方式参考网上)
方案一:ViewGroup中加入TextView或者其他控件作为顶部控件来实现
方案二:(当做view控件使用时)SlideMenu本身是继承了RelativeLayout的,所以理所当然的它也可以在布局文件中作为view而存在,而这种自定义view是无法直接实现沉浸式效果的,那么,曲线救国的方式就来了,我们利用一个RelativeLayout包裹住该SlideMenu,然后在该View之前加入一个高度为1dp的TextView,这里只需把该TextView的Visibity设置为Gone即可不对应用产生任何影响。

我自己使用的应该是提到的第一种方法:

ViewGroup decor = (ViewGroup) activity.getWindow().getDecorView();
ViewGroup decorChild = (ViewGroup) decor.getChildAt(0);
// save ActionBar themes that have transparent assets
decorChild.setBackgroundResource(background);
decor.removeView(decorChild);
//decor.addView(this);

RelativeLayout relativeLayout = new RelativeLayout(activity);
TextView textView = new TextView(activity);
textView.setFitsSystemWindows(true);
relativeLayout.addView(textView);
relativeLayout.addView(this);
decor.addView(relativeLayout);

setContent(decorChild);
break;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值