Material Design學習(三)——懸浮按鈕和可交互提示

繼續使用上篇文章的項目,拷貝一份並改名爲day20_SuspendButton

一、FloatingButton

主佈局:

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:background="?attr/colorPrimary"
        android:layout_height="?attr/actionBarSize"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/fab"
        android:layout_gravity="bottom|end"
        android:layout_margin="16dp"
        android:src="@drawable/done"/>
</FrameLayout>

懸浮按鈕的顏色默認是corlorAccent,還可以設置懸浮高度:app:elevation

處理點擊事件和普通按鈕一樣:

FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Toast.makeText(MainActivity.this, "懸浮按鈕被點擊了", Toast.LENGTH_SHORT).show();
    }
});

在這裏插入圖片描述

二、Snackbar

Snackbar作爲提示工具,可以爲用戶提供交互,使用方法和Toast類似,不過額外增加了一個按鈕點擊事件:

FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
//      Toast.makeText(MainActivity.this, "懸浮按鈕被點擊了", Toast.LENGTH_SHORT).show();
        Snackbar.make(v, "數據被刪除了!", Snackbar.LENGTH_SHORT).setAction("別刪呀", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "好吧,幫你恢復了", Toast.LENGTH_SHORT).show();
            }
        }).show();
    }
});

.make()創建了一個Snackbar對象,第一個參數是當前頁面佈局的任意一個view,他會自動查找最外層的佈局來展示;第二個是用於展示的文字內容,第三個是時長。
.setAction()設置一個動作,從而使得可以交互
在這裏插入圖片描述

三、CoordinatorLayout

觀察上面這個Gif,發現Snackbar會將懸浮按鈕遮擋,這就需要藉助CoodinatorLayout

CoodinatorLayout可以監聽其子控件內的所有子控件的各種事件, 然後做出最合理的響應。 比如彈出的Snackbar提示遮擋了懸浮按鈕,可以監聽他的彈出事件,然後自動將FolatingActionButton向上偏移,從而不會被遮擋

使用方法也很簡單,將原來的FrameLayout替換就行:

    <androidx.coordinatorlayout.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:background="?attr/colorPrimary"
            android:layout_height="?attr/actionBarSize"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

        <com.google.android.material.floatingactionbutton.FloatingActionButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/fab"
            android:layout_gravity="bottom|end"
            android:layout_margin="16dp"
            android:src="@drawable/done"/>
    </androidx.coordinatorlayout.widget.CoordinatorLayout>

運行:
在這裏插入圖片描述
思考:CoordinatorLayout可以監聽所有子控件的事件,但SnackBar不是他的子控件,爲什麼能被監聽到?
答案:Snackbarmake()方法第一個參數傳入了FolatingAction,即Snackbar是基於FloatingAction觸發的,而FloatingActionCoordinaLayout的子控件,所以可以監聽到

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章