Android Support Library 23.2里的BottomSheets的使用
來自: 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看到的效果
昨天晚上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’按鈕
(2)合適的視圖設計
上圖你可明顯的看到第二幅這種設計是不合適的,空白太多,不美觀,對吧!
如果Bottom Sheets 展開或者上拉覆蓋了ActionBar or ToolBar 這種方式也是不合適的.
(3)尺寸的設計
為了符合Material Design 設計,我們對尺寸有嚴格的要求,當然,你想隨意我也阻止不了
我想說的就這些了,如果還有補充,歡迎PR!
又寫了一篇:BottomSheets源碼解析。