Android M新控制項之AppBarLayout,NavigationView,CoordinatorLayout,CollapsingToolbarLayout的使用

來源:互聯網
上載者:User

Android M新控制項之AppBarLayout,NavigationView,CoordinatorLayout,CollapsingToolbarLayout的使用

 

上一篇部落格我們學習了Android Design SuppZ喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcnQgTGlicmFyeb/i1tC1xCDKx7j2vPK1pbXE1+m8/qOssrvBy73itcTNr9Csv8nS1LLOv7zWrsewtcSyqb/NPGJyIC8+DQpBbmRyb2lkIE3Qwr/YvP7WrkZsb2F0aW5nQWN0aW9uQnV0dG9uo6xUZXh0SW5wdXRMYXlvdXSjrFNuYWNrYmFyo6xUYWJMYXlvdXS1xMq508OhozwvcD4NCjxwPtXixqqyqb/NztLDx7zM0PjRp8+wRGVzaWduv+LW0LXExuTL+8vEuPbX6bz+o6y31rHwysdBcHBCYXJMYXlvdXSjrE5hdmlnYXRpb25WaWV3o6xDb29yZGluYXRvckxheW91dKOsQ29sbGFwc2luZ1Rvb2xiYXJMYXlvdXShozwvcD4NCjxwPs2s0fmjrMTj0OjSqtTaxOO1xLmks8zW0NL9yOs8L3A+DQo8cHJlIGNsYXNzPQ=="brush:java;">compile 'com.android.support:design:22.2.0'AppBarLayout

是這樣的

AppBarLayout 是繼承LinerLayout實現的一個ViewGroup容器組件,它是為了Material Design設計的App Bar,支援手勢滑動操作。

預設的AppBarLayout是垂直方向的,它的作用是把AppBarLayout包裹的內容都作為AppBar。類似上面圖片貼出來的效果,代碼布局如下:

                    

此處將Toolbar 和Tablayout的組合部分共同構成 AppBar的效果。

注意: AppBarLayout必須作為Toolbar的父版面配置容器

AppBarLayout是支援手勢滑動效果的,不過的跟CoordinatorLayout配合使用,接下來學習一下CoordinatorLayout組件怎麼使用?

CoordinatorLayout

從開發文檔中可以瞭解到,CoordinatorLayout是一個增強型的FrameLayout。它的作用有兩個

作為一個布局的根布局 最為一個為子視圖之間相互協調手勢效果的一個協調布局

例如一下布局代碼:

                                     

從上面布局看到,CoordinatorLayout協調布局中包裹了兩個布局,一個是NestedScrollView,一個是AppBarLayout,以及FAB按鈕。

我們來看看CoordinatorLayout是怎麼來協調這兩個子視圖手勢操作的。

1.由於CoordinatorLayout是FrameLayout布局,我們可以通過

android:layout_gravity=bottom|end

屬性來控制組件在整個布局中的位置,比如上面效果中的FAB就是通過android:layout_gravity=”bottom|end”來確定 FAB的位置在底端的最右邊的位置。

2.為了達到上面的手勢動畫效果,我們必須做如下設定,通過app:layout_scrollFlags=”scroll|enterAlways” 屬性來確定哪個組件是可滑動的

設定的layout_scrollFlags有如下幾種選項:

scroll: 所有想滾動出螢幕的view都需要設定這個flag- 沒有設定這個flag的view將被固定在螢幕頂部。 enterAlways: 這個flag讓任意向下的滾動都會導致該view變為可見,啟用快速“返回模式”。 enterAlwaysCollapsed: 當你的視圖已經設定minHeight屬性又使用此標誌時,你的視圖只能已最小高度進入,只有當滾動視圖到達頂部時才擴大到完整高度。 exitUntilCollapsed: 滾動退出螢幕,最後摺疊在頂端。

我們上面的布局中 給Toolbar設定了app:layout_scrollFlags屬性,因此,Toolbar是可以滾動出螢幕,且向下滾動有可以出現。

3.為了使得Toolbar可以滑動,我們必須還得有個條件,就是CoordinatorLayout布局下包裹一個可以滑動的布局,比如 RecyclerView,NestedScrollView(經過測試,ListView,ScrollView不支援)具有滑動效果的組件。並且給這些組件設定如下屬性來告訴CoordinatorLayout,該組件是帶有滑動行為的組件,然後CoordinatorLayout在接受到滑動時會通知AppBarLayout 中可滑動的Toolbar可以滑出螢幕了。

app:layout_behavior=@string/appbar_scrolling_view_behavior

總結: 為了使得Toolbar有滑動效果,必須做到如下三點:

CoordinatorLayout必須作為整個布局的父版面配置容器。 給需要滑動的組件設定 app:layout_scrollFlags=”scroll|enterAlways” 屬性。 給你的可滑動的組件,也就是RecyclerView 或者 NestedScrollView 設定如下屬性:
 app:layout_behavior=@string/appbar_scrolling_view_behavior ```##CollapsingToolbarLayout![這裡寫圖片描述](http://img.blog.csdn.net/20150617115211729)CollapsingToolbarLayout包裹 Toolbar 的時候提供一個可摺疊的 Toolbar,一般作為AppbarLayout的子視圖使用。CollapsingToolbarLayout 提供以下屬性和方法是用: 1. Collapsing title:ToolBar的標題,當CollapsingToolbarLayout全屏沒有摺疊時,title顯示的是大字型,在摺疊的過程中,title不斷變小到一定大小的效果。你可以調用setTitle(CharSequence)方法設定title。 2. Content scrim:ToolBar被摺疊到頂部固定時候的背景,你可以調用setContentScrim(Drawable)方法改變背景或者 在屬性中使用 app:contentScrim=?attr/colorPrimary來改變背景。 3. Status bar scrim:狀態列的背景,調用方法setStatusBarScrim(Drawable)。還沒研究明白,不過這個只能在Android5.0以上系統有效果。 4. Parallax scrolling children:CollapsingToolbarLayout滑動時,子視圖的視覺差,可以通過屬性app:layout_collapseParallaxMultiplier=0.6改變。 5. CollapseMode :子視圖的摺疊模式,有兩種“pin”:固定模式,在摺疊的時候最後固定在頂端;“parallax”:視差模式,在摺疊的時候會有個視差摺疊的效果。我們可以在布局中使用屬性app:layout_collapseMode=parallax來改變。布局代碼如下:

 

***總結:***  CollapsingToolbarLayout主要是提供一個可摺疊的Toolbar容器,對容器中的不同視圖設定layout_collapseMode摺疊模式,來達到不同的摺疊效果。1.Toolbar 的高度layout_height必須固定,不能 “wrap_content”,否則Toolbar不會滑動,也沒有摺疊效果。2.為了能讓FloatingActionButton也能摺疊且消失出現,我們必須給FAB設定錨點屬性
app:layout_anchor=@id/appbar

意思是FAB浮動按鈕顯示在哪個布局地區。
且設定當前錨點的位置

app:layout_anchorGravity=”bottom|end|right”

意思FAB浮動按鈕在這個布局地區的具體位置。
兩個屬性共同作用才是的FAB 浮動按鈕也能摺疊消失,出現。

3.給需要有摺疊效果的組件設定 layout_collapseMode屬性。

【轉載請註明出處:http://blog.csdn.net/feiduclear_up/article/details/46514791 CSDN 廢墟的樹】

NavigationView

用於側滑菜單中的menu布局。之前Google在V4包中推出自己的 DrawerLayout作為抽屜側滑菜單,標準使用方法可以參考 google 原生態 抽屜式側滑菜單 Android DrawerLayout 布局的使用介紹。
當時的官方布局是這樣的:

            <framelayout android:id="@+id/frame_content" android:layout_height="match_parent" android:layout_width="match_parent">      </framelayout>                      

其實這次Google只是將上面的ListView布局替換成NavigationView了。簡化了之前ListView寫適配器的繁瑣。

先如今布局改成如下:

                windows="true" android:id="@+id/navigationView" android:layout_gravity="left" android:layout_height="match_parent" android:layout_width="wrap_content" app:headerlayout="@layout/layout_header" app:menu="@layout/layout_menu">     

其中NavigationView 中的 android:layout_gravity=”start” 屬性來控制抽屜菜單從哪邊滑出,一般“start ”從左邊滑出,“end”從右邊滑出。

這裡最主要的兩個屬性分別是:
1.app:headerLayout: 給NavigationView添加頭部布局
2.app:menu:給NavigationView添加menu菜單布局

app:headerLayout布局如下:

        

app:menu 布局如下:

代碼中控制NavigationView

private void initNavigationView(){        navigationView = (NavigationView) findViewById(R.id.navigationView);        drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);        //設定側滑菜單選擇監聽事件        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {            @Override            public boolean onNavigationItemSelected(MenuItem menuItem) {                menuItem.setChecked(true);                //關閉抽屜側滑菜單                drawerLayout.closeDrawers();                return true;            }        });    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        if (item.getItemId() == android.R.id.home){            //開啟抽屜側滑菜單            drawerLayout.openDrawer(GravityCompat.START);        }        return super.onOptionsItemSelected(item);    }

關於NavigationView中item的字型顏色和icon選中狀態顏色是去當前主題theme中的

<--正常狀態下字型顏色和icon顏色-->@android:color/darker_gray<--選中狀態icon的顏色和字型顏色--> @color/accent_material_light

當然你可以通過如下方法或者屬性來改變這一狀態:

setItemBackgroundResource(int):給menu設定背景資源,對應的屬性app:itemBackground setItemIconTintList(ColorStateList):給menu的icon設定顏色,對應的屬性app:itemIconTint setItemTextColor(ColorStateList):給menu的item設定字型顏色,對應的屬性app:itemTextColor

至此,Android Support Design Library庫的使用基本學習完。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.