文档章节

开源中国 OsChina Android 客户端源码分析(2)滑动菜单DrawerLayout

姬鑫
 姬鑫
发布于 2015/05/20 09:30
字数 675
阅读 1379
收藏 6

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

 


© 著作权归作者所有

姬鑫
粉丝 85
博文 54
码字总数 16632
作品 0
宁波
程序员
私信 提问
加载中

评论(3)

九洲北研
九洲北研
愿意学习。愿意提高的兄弟们。一起研究开源中国客户端源码。群号324386394。验证开源中国
九洲北研
九洲北研

引用来自“wlyhqm2006”的评论

建个群,讨论吧
324386394群号
wlyhqm2006
wlyhqm2006
建个群,讨论吧
OSCHINA Android 客户端 1.7.2 发布

OSChina.NET for Android v1.7.2 版本发布了,该版本主要更新内容: v1.7.2 更新日志: 1.新增App异常崩溃监听器,可提交错误报告 2.新增下载更新显示进度数值 ,感谢 @Xushao 提交的代码 3....

迷途d书童
2012/09/20
1K
23
OSCHINA Android 客户端 1.7.0 发布

OSChina.NET for Android v1.7.0 版本发布了,该版本主要更新内容: v1.7.0 更新日志: 1.默认加载数据均为缓存,新数据需用户手动刷新; 2.新增问答区帖子带标签的功能; 3.新增动弹发表评论...

迷途d书童
2012/09/04
1K
24
Android 之 Material Design(三)—DrawerLayout+NavigationView+Toolbar(点击icon打开关闭侧滑菜单)

前言 关于Material Design相关的控件,前两篇文章已经介绍了一些常用的控件了,这篇文章主要介绍一下DrawerLayout+NavigationView+Toolbar。这样Material Design的也介绍的差不多了,剩下Rec...

AFinalDream
2017/06/22
0
0
OSCHINA Android 客户端 1.7.1 Beta2 发布

OSChina.NET for Android v1.7.1 Beta2 版本发布了,该版本主要更新内容: v1.7.1 Beta2 更新日志: 1.将分享功能扩充,增加通用的形式; 2.修复首页部分列表出现空数据的问题; 3.修复收藏失...

迷途d书童
2012/09/10
1K
32
开源中国 Android 客户端 v2.8.6 发布

这个美好的六月,开源中国源创会童鞋们马不停蹄地赶往杭州,因为「毕竟西湖六月中,风光不与四时同」,带着自由、开放、分享的开源精神和大家一起分享、交流,是何等惬意的事情呢!杭州附近的...

巴拉迪维
2017/06/05
2.6K
23

没有更多内容

加载失败,请刷新页面

加载更多

树莓派Zero的初始化

概述 树莓派0拿到手之后,真是爱不释手,如此小巧,配置不逊于一些低端的VPS,又具备IO口/wifi/蓝牙,还可选配摄像头.实乃居家必备之神器. 但是体积如此之小巧,用起来还是有一些问题的.比如usb口过...

一曲忠臣的战歌
34分钟前
2
0
ViewPager懒加载极致优化

目录介绍 01.ViewPager简单介绍 02.ViewPager弊端分析 03.ViewPager预加载 04.ViewPager部分源码 05.懒加载出现问题 06.如何实现预加载机制 07.懒加载配合状态管理器 吕诗禹想换个工作,渴望...

杨充
51分钟前
1
0
shadeEffect动态消失渲染

import QtQuick 2.0ShaderEffect { id:genieEffect anchors.centerIn: parent property variant source mesh:GridMesh{resolution: Qt.size(10,10)} propert......

蓝栩液枫
54分钟前
3
0
苦逼程序员的真实生活 

程序员这个行业虽然待遇还不错,但是不仅累,拿命去换取的,很多时候也是很苦逼的,有多少程序员还在苦苦追求心里的那个她。我就是千万程序员大军中的一员,其中有多苦逼我最清楚,以下的12张...

linux服务器架构
56分钟前
5
0
idea 创建maven 分支apply-patch中模块

1.点击idea 有上角的 project structure 2.选择modules-->点击“+”-->new module--->maven-->添加group id=com.paic.gamma.apply ,artifactid-分支名(qilu-bank),version=1.0-SNAPSHOT ......

qimh
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部