1滑动菜单oschina使用了android.support.v4.widget.DrawerLayout,之前没有用过这个控件,百度了下,大致了解如下:
1.1类似与LinearLayout,就是一个布局控件。
1.2使用时,其有两部分组成,主内容VIEW和菜单内容VIEW,并且主内容必须放在菜单内容的前面,才能让DrawerLayout识别谁是菜单的部分,其宽高都需要设置成match_parent。此处的主内容部分是什么?其实就是主界面上的用以显示各个fragment和底部的导航部分,所以oschina就在主界面的布局文件中直接使用了该控件作为最外围的控件。
1.3 DrawerLayout使用必须在API11之上,所有应用的API的minSdkVersion为11。
布局文件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的垂直布局的这个属性。,哦,底部在菜单项之后,又强制的位于底部,这样就形成了最后的效果:实现了菜单项部分占据除底部控件之外的所有区域。
2<include>一般两个作用:如果布局文件有公共部分,那么可以提取出来公用,另外一点,良好的编程习惯:模块化,可读性强等等。oschina客户端应区域后者。
3菜单项布局文件中,因为四部分内容宽、高、背景、点击效果等一样,所以就设置并引用了同一个样式,减小了代码的冗余。
<style name="MenuItemLayoutStyle">
<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