SlidingMenu实现透明状态栏

来源:互联网 发布:office2016for mac安装 编辑:程序博客网 时间:2024/05/16 15:39

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 assetsdecorChild.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;


0 0
原创粉丝点击