Android CoordinatorLayout、AppBarLayout、DrawerLayout、NavigationView 的使用及問題小結

來源:互聯網
上載者:User

標籤:繼承   menu   change   always   判斷   重要   end   snap   常見   

這裡只對Material Design中這幾種組件使用的重要部分以及容易出現問題的地方進行匯總(遇坑請直接看最後常見問題部分),詳細用法請自行查閱官方文檔

一、CoordinatorLayout

介紹:CoordinatorLayout主要用來作為頂層布局來協調各子布局

使用:CoordinatorLayout包含一個Child和一個Dependency,最後還需要一個最重要的Behavior。

  1)Child是指要執行動作的CoordinatorLayout的子View

  2)Dependency是指Child依賴的View

  3)簡單來講,就是如果Dependency這個View發生了變化,那麼Child這個View就要相應發生變化;

  4)Child發生變化的具體執行的代碼都是放在Behavior這個類裡面。

  5)Behavior最基本的用法就是在Child這個View的XML檔案中定義一個app:layout_behavior="@string/appbar_scrolling_view_behavior"表示跟隨Dependency一起滑動

自訂Behavior:

  1)首先,定義一個類,繼承CoordinatorLayout.Behavior<T>,其中,泛型參數T是我們要執行動作的View類,也就是Child。然後就是去實現Behavior的兩個方法:

/*** 判斷child的布局是否依賴dependency*/   @Override public boolean layoutDependsOn(CoordinatorLayout parent, T child, View dependency) {    boolean rs;    //根據邏輯判斷rs的取值,例如:rs = dependency instanceof CustomDependency    //返回false表示child不依賴dependency,ture表示依賴    return rs;  }/*** 當dependency發生改變時(位置、寬高等),執行這個函數* 返回true表示child的位置或者是寬高要發生改變,否則就返回false
* 每次dependency位置發生變化,都會執行onDependentViewChanged方法*/@Overridepublic boolean onDependentViewChanged(CoordinatorLayout parent, T child, View dependency) { //child要執行的具體動作 return true;}

二、AppBarLayout

介紹:主要是通過AppBarLayout的五種ScrollFlags來定製可滑動VIew的手勢滑動效果

使用:有兩種設定ScrollFlags的方式以及五種ScrollFlags

  1)通過在XML檔案中定義app:layout_scrollFlags屬性來設定,代碼中通過setScrollFlags(int)方法設定

  2)scroll:

    ·想要滾動出螢幕的view都需要設定這個值;

    ·在設定此flag的view之前如果有other_view沒有設定此值,那麼此view的設定將失效;

    ·其他四種flag的使用都必須與scroll配合使用。

  3)enterAlways:

    如果view設定了該flag,那麼該view將啟用quick return模式,即快速返回模式,也就是說在向下滑動中會優先滑動該view使其先顯示出來

  4)enterAlwaysCollapsed:

    enterAlways的附加值,如果view同時設定了該flag,並設定了最小高度minHeight,在向下滑動中,會優先使該view滑動到最小高度,再滑動其他scrolling view,當其他可滑動的view滑動到邊界,設定該flag的view再繼續滑動顯示完全

  5)enterUntilCollapsed:

    如果view設定了該flag,並設定了最小高度minHeight,在向上滑動過程中,會使該view只滑動出至最小高度,不會完全滑動出螢幕

  6)snap:

    主要是實現滑動中的一個吸附效果,要麼該view全部滑動出螢幕,要麼全部顯示在螢幕上,不會出現只有一半顯示在螢幕中的情況,類似於ViewPager的滑動效果

三、DrawerLayout與NavigationView

介紹:通過DrawerLayout與NavigationView這兩個主要是側滑及側滑菜單的實現

使用:將DrawerLayout作為父布局,首頁內容作為第一個子布局,而NavigationView作為最後一個布局

  1)通常需要在NavigationView中指定一個頭布局和一個菜單布局,分別為app:menu="@menu/xxx"和app:headerLayout="@layout/xxx"

  2)menu的中有group和item兩個節點,區別是兩個group之間會有分割線隔開表示不同組

  3)NavigationView的XML中還需要設定一個android:layout_gravity="start"屬性工作表示可以從左側或右側划出

 

常見問題:

1.在結合使用CoordinatorLayout、AppBarLayout的時候,設定了scroll_flag但無法實現沈浸式效果

  原因:CoordinatorLayout的Child View為ViewPager,而ViewPager中嵌套的是Listview

  解決方案:必須使用RecyclerView才可以

2.在結合使用DrawerLayout與NavigationView的時候出現無法通過左劃將側滑菜單收回的情況

  原因:NavigationView沒有作為最後一個子布局

  解決方案:需要將首頁作為首個子布局,將NavigationView作為最後一個子布局

3.在結合使用DrawerLayout與NavigationView的時候只顯示側邊欄並且佔滿全屏

  原因:沒有設定NavigationView的android:layout_gravity="start"屬性

  解決方案:設定該屬性即可,可能Android Studio沒有該屬性提示,需要純手打

Android CoordinatorLayout、AppBarLayout、DrawerLayout、NavigationView 的使用及問題小結

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.