1滑动菜单oschina使用了android.support.v4.widget.DrawerLayout,以前没有用过这个控件,百度了下,大体了解以下:html
1.1相似与LinearLayout,就是一个布局控件。android
1.2使用时,其有两部分组成,主内容VIEW和菜单内容VIEW,而且主内容必须放在菜单内容的前面,才能让DrawerLayout识别谁是菜单的部分,其宽高都须要设置成match_parent。此处的主内容部分是什么?其实就是主界面上的用以显示各个fragment和底部的导航部分,因此oschina就在主界面的布局文件中直接使用了该控件做为最外围的控件。编程
1.3 DrawerLayout使用必须在API11之上,全部应用的API的minSdkVersion为11。app
布局文件fragment_navigation_drawer.xml ,布局总体两大部分: 能够拖拽的net.oschina.app.widget.CustomerScrollView,内部包含具体菜单项的fragment_navigation_drawer_items.xml布局文件和位于菜单底部的用以设置及关闭功能的fragment_navigation_drawer_foot.xml布局文件。模块化
从对布局文件的分析来看,一下几点值得咱们学以至用:布局
1<net.oschina.app.widget.CustomerScrollView 中使用了android:layout_height="0dip" 加android:layout_weight="1"的组合属性,关于android:layout_weight的用法,关键就是在LinearLayout中按比例显示。可是<include layout="@layout/fragment_navigation_drawer_foot"/>中没有一样的设置android:layout_weight属性,这样岂不是让菜单项部分彻底占据了整个区域?追踪到fragment_navigation_drawer.xml中,发现只是设置了位于父布局文件的底部这个属性,再加上最外层的LinearLayout的垂直布局的这个属性。,哦,底部在菜单项以后,又强制的位于底部,这样就造成了最后的效果:实现了菜单项部分占据除底部控件以外的全部区域。spa
2<include>通常两个做用:若是布局文件有公共部分,那么能够提取出来公用,另一点,良好的编程习惯:模块化,可读性强等等。oschina客户端应区域后者。.net
3菜单项布局文件中,由于四部份内容宽、高、背景、点击效果等同样,因此就设置并引用了同一个样式,减少了代码的冗余。xml
<style name="MenuItemLayoutStyle">htm
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:minHeight">55dip</item>
<item name="android:gravity">center_vertical</item>
<item name="android:orientation">horizontal</item>
<item name="android:paddingLeft">15dip</item>
<item name="android:paddingRight">15dip</item>
<item name="android:background">@drawable/drawer_menu_item_background</item></style>
4参考android.support.v4.widget.DrawerLayout的相关博客http://www.cnblogs.com/mengdd/p/3213378.html
5推荐另一种实现滑动菜单的博客:http://blog.csdn.net/lmj623565791/article/details/36677279