開源中國 OsChina Android 客戶端源碼分析(2)滑動菜單DrawerLayout

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

相關文章
相關標籤/搜索