android design库DrawerLayout的使用及实现类似网易云音乐菜单效果
2016-11-21 11:32
176 查看
用网易云音乐的时候感觉它的侧滑菜单效果还是很酷炫的,而且在看过Design库以后就很清楚它应该是用DrawerLayout实现的(讲道理应该是哈)。
网易云音乐效果图:
建一个Activity,在布局中键入如下代码,注释也写了的:
接下来就是Activity的代码了,像平常实现类似沉浸式效果一样(这个值得一个优秀的Android应用从建项目开始)需要为window设置flag:
而本次就不一样了,还需要为window设置statusBarColor,
由于我只有两部4.2和5.1的手机,本次测试也是在5.1上测试的,至于5.1之前到底是啥效果,我也不知道。。。
先来看看onCreate方法:
其中大部分我想都看得懂吧,来说一说这个ActionBarDrawerToggle,看看官方文档
* This class provides a handy way to tie together the functionality of
* {@link android.support.v4.widget.DrawerLayout} and the framework
* implement the recommended design for navigation drawers.
直白点说就是它使DrawerLayout和ActionBar绑定到一起,内部已经实现了对DrawerLayout的控制,
toggle.syncState()方法就是同步DrawerLayout当前状态。
对于NavigationView的操作就不多说了,设置监听器,并在监听器里面处理事件就ok啦
网易云音乐效果图:
建一个Activity,在布局中键入如下代码,注释也写了的:
<?xml version="1.0" encoding="utf-8"?> <!--根布局为DrawLayout,视个人情况而定 为了方便实现沉浸式效果,还是建议以此为根 而且DrawerLayout的高度一定要是MeasureSpec.EXACTLY 详情可查看DrawerLayout的onMeasure方法--> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawerLayout" android:layout_width="match_parent" android:layout_height="match_parent" tools:openDrawer="start"> <!--内容层,DrawerLayout会根据child的layout_gravity属性来判断谁是content谁是drawer 可查看DrawerLayout的isContentView方法和isDrawerView方法 另外值得一提的是,两个childView的位置如果调换,虽说任然会有菜单,但是相同代码情况下状态栏只是半透明而不是全透明 如果有大神看到,望解我疑惑--> <!--下面有个background属性,这一步很关键--> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" android:background="@color/colorPrimaryDark" android:orientation="vertical"> <!--就是个toolbar 对于这种项目中可能经常用到的东西,建议把他封装起来--> <include layout="@layout/layout_toolbar"/> <!--正儿八经的内容--> <include layout="@layout/content_activity_main" /> </LinearLayout> <!--菜单 布局随意选择 NavigationView是google专为DrawerLayout量身打造的菜单控件,已menu的形式设置布局,用起来确实方便 而且NavigationView提供一个headerLayout和menu属性来让你个性化你的应用--> <android.support.design.widget.NavigationView android:id="@+id/navigationView" android:fitsSystemWindows="true" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="start" app:headerLayout="@layout/layout_nav_header" app:menu="@menu/menu_nav_main"> </android.support.design.widget.NavigationView> </android.support.v4.widget.DrawerLayout>
接下来就是Activity的代码了,像平常实现类似沉浸式效果一样(这个值得一个优秀的Android应用从建项目开始)需要为window设置flag:
void initWindow(){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); } }
而本次就不一样了,还需要为window设置statusBarColor,
void initWindow2(){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ) { Window window = getWindow();//获取window window.setStatusBarColor(Color.TRANSPARENT); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); } }
由于我只有两部4.2和5.1的手机,本次测试也是在5.1上测试的,至于5.1之前到底是啥效果,我也不知道。。。
先来看看onCreate方法:
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initWindow2(); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setTitle(getString(R.string.description)); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this,mDrawerLayout, toolbar,R.string.openDrawer,R.string.closeDrawer); mDrawerLayout.addDrawerListener(toggle); toggle.syncState(); NavigationView navigationView = (NavigationView) findViewById(R.id.navigationView); navigationView.setNavigationItemSelectedListener(this); }
其中大部分我想都看得懂吧,来说一说这个ActionBarDrawerToggle,看看官方文档
* This class provides a handy way to tie together the functionality of
* {@link android.support.v4.widget.DrawerLayout} and the framework
ActionBarto
* implement the recommended design for navigation drawers.
直白点说就是它使DrawerLayout和ActionBar绑定到一起,内部已经实现了对DrawerLayout的控制,
toggle.syncState()方法就是同步DrawerLayout当前状态。
对于NavigationView的操作就不多说了,设置监听器,并在监听器里面处理事件就ok啦
相关文章推荐
- android开发之&使用ViewPager加gridView实现菜单按钮分页滑动(类似QQ表情选择翻页效果)
- Android中如何使用ViewPager实现类似laucher左右拖动效果
- android 中使用TabHost控件实现微信界面的底部菜单效果
- Android中使用TabHost实现类似标签栏的效果
- Android程序开发之使用Design包实现QQ动画侧滑效果和滑动菜单导航
- Android使用wheelView实现简单类似ios PickerView选择器效果
- Android中如何使用ViewPager实现类似laucher左右拖动效果
- Android 实现类似美团的菜单效果
- Android 使用ViewDragHelper实现向slidingMenu侧滑菜单的效果
- Android中如何使用ViewPager实现类似laucher左右拖动效果
- Android中如何使用ViewPager实现类似laucher左右拖动效果
- Android中如何使用ViewPager实现类似laucher左右拖动效果
- Android中如何使用ViewPager实现类似laucher左右拖动效果
- Android使用SwipeListView实现类似QQ的滑动删除效果
- Android中如何使用ViewPager实现类似laucher左右拖动效果
- android下使用Fragment实现左侧3级菜单+动画效果
- Android中如何使用ViewPager实现类似laucher左右拖动效果 3ff8
- Android中如何使用ViewPager实现类似laucher左右拖动效果
- 【转】Android 使用ViewPager实现类似gallery画廊的效果(画廊效果之ViewPager显示多个图片)
- Android中如何使用ViewPager实现类似laucher左右拖动效果