Android Support Library 23.2里的BottomSheets的使用

epqv0953 8年前發布 | 43K 次閱讀 Android開發 移動開發

來自: http://www.jcodecraeer.com//a/anzhuokaifa/androidkaifa/2016/0228/4008.html


原文出處:https://github.com/android-cjj/BottomSheets 

Android Support Library 23.2里的 Design Support Library新加了一個Bottom Sheets控件,一個底部表,就是我們經常在分享或者地圖、音樂等app看到的效果

blob.png  blob.png

昨天晚上Support Library 23.2包還沒能更新,官方視頻就已經透露出了,視頻地址,從視頻看出Support Library 23.2包新增了:

  • 1. Support Vector Drawables and Animated Vector Drawables

  • 2. AppCompat DayNight theme

  • 3. Design Support Library: Bottom Sheets

  • 4. Support v4: MediaBrowserServiceCompat

  • 5. RecyclerView

  • 6. Custom Tabs

  • 7. Leanback for Android TV

具體可以上官網博客看看。

這篇文章我給大家說說BottomSheetBehavior的使用及注意的地方

(1)在布局文件xml中

<?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:id="@+id/cl"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    >

    <android.support.v4.widget.NestedScrollView
        android:id="@+id/bottom_sheet"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:behavior_hideable="true"
        app:behavior_peekHeight="50dp"
        app:layout_behavior="@string/bottom_sheet_behavior"
        >
          <!-- NestedScrollView里設置你的底部表長什么樣的-->
    </android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>

(2)在java代碼中

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ns);

        // The View with the BottomSheetBehavior
        CoordinatorLayout coordinatorLayout = (CoordinatorLayout) findViewById(R.id.cl);
        View bottomSheet = coordinatorLayout.findViewById(R.id.bottom_sheet);
        final BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet);
        behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
            @Override
            public void onStateChanged(@NonNull View bottomSheet, int newState) {
                //這里是bottomSheet 狀態的改變,根據slideOffset可以做一些動畫
            }

            @Override
            public void onSlide(@NonNull View bottomSheet, float slideOffset) {
                //這里是拖拽中的回調,根據slideOffset可以做一些動畫
            }
        });
    }

其實也挺簡單的,我來解釋一下。通過附加一個BottomSheetBehavior 給CoordinatorLayout的子視圖,上文xml中的是NestedScrollView(adding app:layout_behavior = " android.support.design.widget.BottomSheetBehavior”),當然,RecyclerView也是可以的。

     app:behavior_hideable="true"
     app:behavior_peekHeight="50dp"

這兩個屬性我說說,peekHeight是當Bottom Sheets關閉的時候,底部下表我們能看到的高度,hideable 是當我們拖拽下拉的時候,bottom sheet是否能全部隱藏。 如果你需要監聽Bottom Sheets回調的狀態,可以通過setBottomSheetCallback來實現,onSlide方法是拖拽中的回調,根據slideOffset可以做一些動畫 onStateChanged方法可以監聽到狀態的改變,總共有5種

  • STATE_COLLAPSED: 關閉Bottom Sheets,顯示peekHeight的高度,默認是0

  • STATE_DRAGGING: 用戶拖拽Bottom Sheets時的狀態

  • STATE_SETTLING: 當Bottom Sheets view釋放時記錄的狀態。

  • STATE_EXPANDED: 當Bottom Sheets 展開的狀態

  • STATE_HIDDEN: 當Bottom Sheets 隱藏的狀態

我也簡單的寫了兩個demo,你可以看我源碼是怎么用的

     

使用就這些了,接下來我們來講講該注意的地方,應該說怎樣更好的使用它。

(1)關閉Bottom Sheets的行為

可以通過下圖的形式,拖拽、點擊bottom sheet之外的地方和通過‘x’按鈕

blob.png

(2)合適的視圖設計

blob.png   blob.png

上圖你可明顯的看到第二幅這種設計是不合適的,空白太多,不美觀,對吧!

blob.png   blob.png

如果Bottom Sheets 展開或者上拉覆蓋了ActionBar or ToolBar 這種方式也是不合適的.

(3)尺寸的設計

為了符合Material Design 設計,我們對尺寸有嚴格的要求,當然,你想隨意我也阻止不了

blob.png

我想說的就這些了,如果還有補充,歡迎PR!

又寫了一篇:BottomSheets源碼解析

 

 本文由用戶 epqv0953 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!