1. 程式人生 > >Android框架之路——FloatingActionButton使用與ToolBar進階

Android框架之路——FloatingActionButton使用與ToolBar進階

參考部落格:

效果演示:

FAB的相關:

  • app:fabSize設定FloatingActionButton的大小,有兩種賦值分別是 “mini” 和 “normal”,預設是normal;
  • app:backgroundTint:FloatingActionButton的背景顏色,預設的背景顏色是Theme主題中的。
  • app:rippleColor設定FAB點選時的背景顏色;
  • app:borderWidth,該屬性尤為重要,如果不設定0dp,那麼在4.1的sdk上FAB會顯示為正方形,而且在5.0以後的sdk沒有陰影效果,所以設定為borderWidth=”0dp”;
  • app:elevation設定預設狀態下FAB的陰影大小;
  • app:pressedTranslationZ設定點選時候FAB的陰影大小;
  • src設定FAB的圖示,Google建議符合Design設計的該圖示大小為24dp。

    這是我的FloatingActionButton佈局,基本屬性都按照上述設定;

    <!-- FloatingActionButton佈局 -->
    <android.support.design.widget.FloatingActionButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        app:backgroundTint="@color/colorPrimary"
        app:fabSize="normal"
        app:rippleColor="@color/colorAccent"
        app:borderWidth="0dp"
        app:elevation="6dp"
        app:pressedTranslationZ="12dp"
        android:src="@drawable/about"
        android:layout_margin="20dp"/>
    

    點選事件彈出SnakeBar:

    mFloatingActionButton = (FloatingActionButton) findViewById(R.id.fab_button);
    mFloatingActionButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Snackbar.make(findViewById(R.id.fab_button), "fab is clicked", Snackbar.LENGTH_SHORT)
                    .setAction("undo", new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
    
                        }
                    })
                    .show();
        }
    });
    

    除了Google的FAB,這裡不得不介紹一款第三方的FAB庫,做出點選FAB可以彈出子FAB佈局,連結==》

    想要在AndroidStudio中使用也非常簡單,just:

    dependencies {
            compile 'com.getbase:floatingactionbutton:1.10.1'
    }
    

    OK,現在看一下佈局:

    <com.getbase.floatingactionbutton.FloatingActionsMenu
        android:id="@+id/fab_menu"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end">
    
        <com.getbase.floatingactionbutton.FloatingActionButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/fab_1"/>
        <com.getbase.floatingactionbutton.FloatingActionButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/fab_2"
            fab:fab_colorNormal="@color/colorAccent"
            fab:fab_size="mini"
            fab:fab_icon="@drawable/share1"/>
    </com.getbase.floatingactionbutton.FloatingActionsMenu>
    
    • fab:fab_size=”mini”是設定大小;
    • fab:fab_colorNormal是設定顏色;
    • fab:fab_icon=”@drawable/share1”是設定圖示。

    更多的屬性設定可以看一下參考部落格二。點選事件和Google的也是十分相似,基本沒有變動,就是這裡的FAB是com.getbase.floatingactionbutton包下的,如下:

    mFloatingActionButton = (com.getbase.floatingactionbutton.FloatingActionButton) findViewById(R.id.fab_1);
    mFloatingActionButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Snackbar.make(findViewById(R.id.fab_1), "fab is clicked", Snackbar.LENGTH_SHORT)
                    .setAction("undo", new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
    
                        }
                    })
                    .show();
        }
    });
    

ToolBar進階:

Toobar主要是用來替換ActionBar的,換句話說,ActionBar能做的,Toolbar都能做。但Toolbar遠遠不止這些,你可以好好的看看參考部落格一,還是非常有必要閱讀一下的。這裡我就直接進入主題,Toolbar和AppBarLayout結合在一起可以實現更加絢麗的效果,當然這其中還要涉及到倆個玩意,一個是CoordinatorLayout,另一個是NestedScrollView。

不管別的,先看一下佈局檔案:

<android.support.design.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/colorPrimary"
                app:navigationIcon="@drawable/navigation"
                app:title="Navigation"
                app:titleTextColor="#fff"
                app:layout_scrollFlags="scroll"/>

        </android.support.design.widget.AppBarLayout>

        <android.support.v4.widget.NestedScrollView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_behavior="@string/appbar_scrolling_view_behavior">

            <android.support.v7.widget.RecyclerView
                android:id="@+id/recyclerView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>

        </android.support.v4.widget.NestedScrollView>

        ......

</android.support.design.widget.CoordinatorLayout>

要說明以下幾點:

  • 要實現這個功能必須Toolbar被AppBarLayout包裹,可滑動型別的View(如recyclerview)被NestedScrollView包裹;
  • Toolbar中app:layout_scrollFlags=”scroll”,用來設定recyclerview上滑時Toolbar的操作;
  • 在NestedScrollView屬性中加入app:layout_behavior=”@string/appbar_scrolling_view_behavior”即可關聯起來Toolbar和recyclerview;

詳細內容還是建議大家看看參考部落格,畢竟這個功能實現現階段個人差不多夠用。這裡實現的功能主要是,RecyclerView上滑時,ToolBar會向上隱藏。下拉時,又可以再加載出來。最後,貼一下整個佈局檔案,裡面包含NavigationView、Toolbar、RecyclerView和FloatingActionButton。

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    android:id="@+id/drawerLayout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:fab="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.ping.recyclerview.MainActivity">

    <android.support.design.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/colorPrimary"
                app:navigationIcon="@drawable/navigation"
                app:title="Navigation"
                app:titleTextColor="#fff"
                app:layout_scrollFlags="scroll"/>
        </android.support.design.widget.AppBarLayout>

        <android.support.v4.widget.NestedScrollView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_behavior="@string/appbar_scrolling_view_behavior">

            <android.support.v7.widget.RecyclerView
                android:id="@+id/recyclerView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>


        </android.support.v4.widget.NestedScrollView>

        <!-- FloatingActionButton佈局 -->
        <!--<android.support.design.widget.FloatingActionButton-->
            <!--android:id="@+id/fab_button"-->
            <!--android:layout_width="wrap_content"-->
            <!--android:layout_height="wrap_content"-->
            <!--android:layout_gravity="bottom|end"-->
            <!--app:backgroundTint="@color/colorPrimary"-->
            <!--app:fabSize="normal"-->
            <!--app:rippleColor="@color/colorAccent"-->
            <!--app:borderWidth="0dp"-->
            <!--app:elevation="6dp"-->
            <!--app:pressedTranslationZ="12dp"-->
            <!--android:src="@drawable/about"-->
            <!--android:layout_margin="20dp"/>-->
        <com.getbase.floatingactionbutton.FloatingActionsMenu
            android:id="@+id/fab_menu"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|end">

            <com.getbase.floatingactionbutton.FloatingActionButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/fab_1"/>
            <com.getbase.floatingactionbutton.FloatingActionButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/fab_2"
                fab:fab_colorNormal="@color/colorAccent"
                fab:fab_size="mini"
                fab:fab_icon="@drawable/share1"/>

        </com.getbase.floatingactionbutton.FloatingActionsMenu>

    </android.support.design.widget.CoordinatorLayout>

    <android.support.design.widget.NavigationView
        android:id="@+id/navigationView"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="left"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/navigation_header"
        app:menu="@menu/na_menu">

    </android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>

個人公眾號:每日推薦一篇技術部落格,堅持每日進步一丟丟…歡迎關注,想建個微信群,主要討論安卓和Java語言,一起打基礎、用框架、學設計模式,菜雞變菜鳥,菜鳥再起飛,願意一起努力的話可以公眾號留言,謝謝…