1. 程式人生 > >AndroidStudio Toolbar 滑動隱藏以及返回按鈕點選事件

AndroidStudio Toolbar 滑動隱藏以及返回按鈕點選事件

Android Toolbar 實現收縮展開動畫:
使用 CoordinatorLayout 作為做外層佈局,
ToolBar 使用 AppBarLayout和 CollapsingToolbarLayout 兩個巢狀。

CollapsingToolbarLayout 需指定 layout_scrollFlags :scroll,exitUntilCollapsed,enterAlwaysCollapsed,|enterAlways,snap 其中的一種或多種。
CoordinatorLayout 裡面的子佈局需要新增可滑動的佈局,如NestedScrollView或者RecycleView等,其他滑動如listview貌似不可以實現toolbar下滑收縮,可巢狀NestedScrollView,不過需解決滑動衝突問題,或直接使用RecycleView.
可滑動控制元件,如NestedScrollView,需新增動作標識:layout_behavior:@string/appbar_scrolling_view_behavior

使用 NestedScrollView 要新增 android:fillViewport=”true” 使子控制元件充滿布局

為了狀態列和標題欄分開,需新增:android:fitsSystemWindows=”true”

介面描述圖如下:
這裡寫圖片描述

具體程式碼示例:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context="com.zhou.picassotest.MainActivity"> <android.support.design.widget.AppBarLayout android:id="@+id/app_bar"
android:layout_width="match_parent" android:layout_height="@dimen/app_bar_height" android:fitsSystemWindows="true" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/toolbar_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" app:contentScrim="?attr/colorPrimary" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:popupTheme="@style/AppTheme.PopupOverlay" app:layout_collapseMode="pin" /> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <GridView android:id="@+id/gridView" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/white" android:gravity="center" android:numColumns="4" android:scrollbars="none" android:stretchMode="columnWidth" /> </android.support.v4.widget.NestedScrollView> </android.support.design.widget.CoordinatorLayout>

Toolbar 使用簡單介紹:
在佈局中 findViewById 找到控制元件,注意需要 v7 適配包中的Toolbar
getSupportActionBar(toolbar);
想使用 toolbar 的返回按鈕(都要在setSupportActionBar 後呼叫)實現 Toolbar 點選返回事件:

toolbar.setNavigationIcon( mDrawable);//或者在佈局中 app:navigationIcon="?attr/homeAsUpIndicator"
toolbar.setNavigationOnClickListener(new View.OnClickListener(){
    public void onClick(View view){
        finish();
    }
};

或者
getSupportActionBar().setDisplayHomeAsUpEnable(true);

重寫 onOptionsItemSelected

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if(item.getItemId()==android.R.id.home){
        finish();
        return true;
    }
    return super.onOptionsItemSelected(item);
}