1. 程式人生 > >Android FloatingActionButton使用方法及小技巧-design

Android FloatingActionButton使用方法及小技巧-design

FloatingActionButton(簡稱FAB)的使用方法非常的簡單

和一個普通控制元件一樣,在xml佈局檔案中定義(記得匯入Design包)

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right|bottom"
        android:layout_margin="20dp"
android:src="@android:drawable/ic_dialog_email" app:backgroundTint="#00ff00" app:borderWidth="0dp" app:elevation="6dp" app:fabSize="normal" app:pressedTranslationZ="10dp" app:rippleColor="#ff87ffeb"/>
  • src:設定FAB的圖示,google建議圖示的大小為24dp
  • backgroundTint:按鈕的預設顏色
  • borderWidth:設定為0dp,不然在4.1的SDK上會顯示方塊形,在5.x的系統上執行會沒有陰影
  • pressedTranslationZ:設定立體感,點選時的陰影大小,預設是12dp
  • fabSize:設定FloatingActionButton的大小樣式,normal為正常大小(56dp),mini為小號的(40dp)
  • elevation:設定立體感,正常情況下陰影的大小,預設為6dp
  • rippleColor:點選時的顏色,預設取theme中colorControlHighlight的顏色

FAB的點選事件和普通View的點選事件一樣,使用OnClickListener設定監聽

原生的FAB在體驗上並不友好,因為它遮擋住了要顯示的內容,尤其是在和ListView等控制元件搭配時,如果頁面滾動到了最後,那麼遮住的部位就顯示不出來了。
解決方法:在頁面向下滑動的時候隱藏FAB,向上滑動時再顯示出來

檢視原始碼可以發現,FAB為我們提供了顯示和隱藏的方法

    /**
     * Hides the button.
     * <p>This method will animate the button hide if the view has already been laid out.</p>
     */
    public void hide() {
        hide(null);
    }

    /**
     * Shows the button.
     * <p>This method will animate the button show if the view has already been laid out.</p>
     */
    public void show() {
        show(null);
    }

想實現這樣的效果,需要使用到CoordinatorLayout佈局,它幫我們協調好了這一系列互動
CoordinatorLayout中通過Behavior間接的來控制其子View的各種行為,在FAB內部已經實現了Behavior介面

    /**
     * Behavior designed for use with {@link FloatingActionButton} instances. It's main function
     * is to move {@link FloatingActionButton} views so that any displayed {@link Snackbar}s do
     * not cover them.
     */
    public static class Behavior extends CoordinatorLayout.Behavior<FloatingActionButton> {
        // We only support the FAB <> Snackbar shift movement on Honeycomb and above. This is
        // because we can use view translation properties which greatly simplifies the code.
        private static final boolean SNACKBAR_BEHAVIOR_ENABLED = Build.VERSION.SDK_INT >= 11;

        private ValueAnimatorCompat mFabTranslationYAnimator;
        private float mFabTranslationY;
        private Rect mTmpRect;

        ......

實現Behavior能讓FAB監聽CoordinatorLayout裡其它子View控制元件的狀態,如FAB和Snackbar的配合顯示,當Snackbar彈出時,FAB會上移給Snackbar騰出位置
這裡寫圖片描述

由於目前FAB內部實現的Behavior只對Snackbar進行了處理,所以我們需要自定義Behavior,來達到需要的顯示效果

public class ScrollAwareFABBehavior extends FloatingActionButton.Behavior{

    public ScrollAwareFABBehavior(Context context, AttributeSet attrs) {
        super();
    }

    @Override
    public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child,
                                       View directTargetChild, View target, int nestedScrollAxes) {
        return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL ||
                super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target,
                        nestedScrollAxes);
    }

    @Override
    public void onNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child,
                               View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) {
        super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed);
        if (dyConsumed > 0 && child.getVisibility() == View.VISIBLE) {
            child.hide();
        } else if (dyConsumed < 0 && child.getVisibility() != View.VISIBLE) {
            child.show();
        }
    }
}

然後在佈局檔案中通過layout_behavior關聯該類,路徑為包名加類名
app:layout_behavior=”zhuwentao.com.usedesigndemo.ScrollAwareFABBehavior”
注意:需要用RecyclerView替換掉ListView,並使用CoordinatorLayout作為根佈局

<?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"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

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

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        android:src="@android:drawable/ic_dialog_email"
        app:backgroundTint="#00ff00"
        app:elevation="6dp"
        app:fabSize="normal"
        app:layout_anchor="@id/rv_data"
        app:layout_anchorGravity="bottom|right|end"
        app:layout_behavior="zhuwentao.com.usedesigndemo.ScrollAwareFABBehavior"
        app:pressedTranslationZ="8dp"
        app:rippleColor="#ff87ffeb"
        app:useCompatPadding="false"/>

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

FAB要記得加上layout_anchor關聯RecyclerView
這裡寫圖片描述

官方自帶的顯示和隱藏效果就是這樣的,縮小隱藏,放大呈現

相關推薦

Android FloatingActionButton使用方法技巧-design

FloatingActionButton(簡稱FAB)的使用方法非常的簡單 和一個普通控制元件一樣,在xml佈局檔案中定義(記得匯入Design包) <android.support.design.widget.FloatingActionBu

Android開發中EditText技巧之如何設定游標顏色粗細

有時為了使用者體驗感更好,所以我們需要對EditText的游標進行設定,這裡就是關於游標顏色和粗細的設定,非常簡單。 第一步:在資原始檔drawable下新建一個游標控制edittext_color_cursor.xml <?xml version="1.0" e

做預解釋題的一點方法技巧

改善 返回值 第一次 都是 做出 cti 條件判斷 false 回調函數 在JavaScript中的函數理解中預解釋是一個比較難懂的話題。原理雖然簡單,寥寥數言,但其內涵卻有深意,精髓難懂。如何在輕松活躍的頭腦中將它學會,現在針對我在學習中的一點小竅門給大家分享一

aNDROID快捷鍵使用技巧

5% 快捷鍵 ongl oid eclips 使用 lis eclipse android ECLIpsE%E6%96%87%E5%AD%97%E5%A4%A7%E5%B0%8F%E4%BF%AE%E6%94%B9%28%E8%BD%AC%29 http://music.

一個查看UI5控件所有公有方法技巧

列表 str 反思 runtime ava ans image 根據 定位 一個很小的tip:比如我想把UI5表格控件裏的每列設置成寬度根據顯示的內容自適應,需要知道應該調用控件的哪個方法來實現。 一種辦法當然是查SAP幫助文檔,得知需要調用控件的公有方法setAutoS

Android開發的一些技巧

本篇講述的是Android開發中遇到的一些好用的小技巧,或者一些實用的API,很多人都知道,但也有人不知道,記錄下來,如果能幫助到大家,也是極好的.有些工具和類我也會經常用,所以我會根據自己的想法去寫.有些地方坐在並沒有將這個工具的作用講出來,我會補充上去. 正文: Environ

ThinkPHP Restful API 開發流程技巧

最近學習了七月老師的ThinkPHP+小程式的實戰課程,對用於ThinkPHP開發Rest api介面有了更深的體會,課程中七月老師的清晰的模組化程式設計思想也給我有了很大的感觸。希望通過此篇文章整理課程開發思路的同時,也能給對這方面有學習興趣的同學提供些許幫助。

微信域名被封了,要怎麼解封呢?分享一些方法技巧

如果域名被微信封了,如何解封呢? 如果被封,解封方法如下:1、進入微信官網手動解封,選擇在微信頁面右上角的“幫助與反饋”選項並點選進入;2、輸入需要填寫的各個號碼,點選“傳送驗證碼”,並在新的頁面裡輸入驗證碼並確認“提請要求”,這樣就可以解除限制了;3、最好在解除限制後的24小時以後再登入,

Android-0. Android Studio的一些技巧

目錄 快速宣告一個區域性變數 快捷鍵ctrl+alt+v,或者選中要生成變數的程式碼: 此操作會快速生成一個區域性變數,如下intent:   選擇勾選上面的Declare final會在變數前面增加final 快速宣告一個成員變數 快捷

vim使用方法技巧

一.vim的簡單介紹        vim是一個由vi增強版的編輯工具,是一個開源免費的軟體,它功能豐富,使用快捷,應用廣泛,。vim也是大多數linux系統上的預設編輯器,用於對文字檔案進行建立,顯示,編輯,刪除,複製等操作,需要用命令進行控制。 二.vim幫助資訊

【精華】PS快捷鍵技巧集錦

  在修圖過程中時常會遺忘一些常用的快捷鍵及某些用法,而掌握快捷鍵可以大大提高工作效率,特整理此篇以備自己和大家檢視。   注:其中紅色部分為必背內容,黑色部分為選背內容。 1.選取工具的快捷鍵: 移動-V (Move) 選框-M (Ma

聊聊圖示設計流程技巧

圖示設計要求熟練運用軟體,涉獵各種向量特性、蒙板以及構造實體幾何,因此,會需要同學們運用不同的軟體工具與技巧,今天的譯文全都是超實用的技巧幹貨,週末來補充點有料的。 圖形建立 vs 圖形樣式 對向量路徑的建立和圖形樣式的設定作出正確的區分是十分重要的,因為它們需要

25條div+CSS程式設計提醒技巧整理

1、ul標籤在Mozilla中預設是有padding值的,而在IE中只有margin有值。 2、同一個的class選擇符可以在一個文件中重複出現,而id選擇符卻只能出現一次;對一個標籤同時使用class和id進行CSS定義,如果定義有重複,id選擇符做的定義有效,是因為ID的權值要比CLASS大。 3、一個相

Android防截圖技巧

Android4.0 中添加了個新特性,在“最近程式”列表中會顯示程式執行的縮圖,如果密碼輸入介面被截圖,則就會悲劇了,開發者朋友小心了,解決方案很簡單,加入如下程式碼即可 @Override public void onCreate(BundlesavedInstanceState) { supe

CString類的轉化(高階)技巧(轉)

CString類的轉化(高階) 通過閱讀本文你可以學習如何有效地使用 CString。  CString 是一種很有用的資料型別。它們很大程度上簡化了MFC中的許多操作,使得MFC在做字串操作的時候方便了很多。不管怎樣,使用CString有很多特殊的技巧,特別是對於純C背景下

android 系統定製的技巧(網路收集)

1開機圖片:   android-logo-mask.png   android-logo-shine.png   這兩個圖片一個在上一個在下   ./out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_i

tableView中分割線為什麼不顯示?——跳坑技巧

往tableview中隱藏分割線的方法,比較簡單,網上很多;今天遇到一個問題:向tableview中新增分割線。 一般我們都會這樣做: tableView.separatorInset = UIEdgeInsetsZero 然而發現並沒有效果;於是查閱了資料,一般可以按

Android Studio開發的技巧

技巧 1 AndroidStudio 有一個很有用的 actionbar 庫存圖示生成器。 只要開啟:[File] >[New] >[Image Asset] 在該介面中,選擇“Clipart”就可以得到簡易的庫存元件。 技巧 2 單獨

Rails中使用ajax的兩種方法除錯技巧

Rails這個超級強大的網站構建器為使用者介面變更和互動提供了ajax操作的能力,據我所知在Rails中使用ajax有兩種方法,下面為大家一一道來 ;) 一.在$(document).ready中註冊hook,伺機而動 我們可以為html中某個元素註冊回

python2.7/3.7安裝NumPy函數庫的一種方法心得

dir scripts 執行文件 install 網上 numpy director span date 前提:python2.7以及對應的pip(python包管理工具,32/64位)已在win7上安裝(安裝地址:d:\python27)。 在pyth