您的位置:首页 > 移动开发 > Android开发

Android使用CoordinatorLayout和BottomSheetBehavior实现滑动效果(底部抽屉)

2018-02-20 23:10 5665 查看
因为需要在安卓中实现底部的滑动抽屉效果,然后找了SlidingDrawer、Slidingmenu等等第三方的实现方案,发现基本已经被淘汰了,然后找到了一个官方的侧滑菜单DrawerLayout,但是这玩意只能侧滑。。。还有一个功能非常接近的控件——ButtonSheet,但是限制太多,实现复杂。
最后,发现了一个好东西——CoordinatorLayout(这里是官方文档),是个很新鲜的东西( Google IO/15 大会发布),用来和其他控件联动交互。它的功能很多,这里就来说说用它的layout_behavior中的BottomSheetBehavior实现滑动抽屉效果。
首先放上XML



主界面和滑动部分的页面是放在一起的,在你需要滑动的view里面加上app:layout_behavior="android.support.design.widget.BottomSheetBehavior"这么一行就让界面带上了滑动效果。但是这样是不够的,首先要知道,BottomSheet是有这几个状态的:
STATE_DRAGGING, STATE_SETTLING, STATE_EXPANDED, STATE_COLLAPSED,  STATE_HIDDEN.
分别是拖拽中,静止,拉伸,折叠,隐藏(没有官方的翻译,大致意思是这样的)
如果只是单纯加上了这条属性,没有添加其他控制方法的话,你会发现如果手滑让它隐藏了,你就再也见不到你的抽屉了!
所以我们要加上这两条属性:app:behavior_hideable="false"
app:behavior_peekHeight="150dp"第一条使它不可隐藏,第二条使它能露出一点点让你拖动。
到此为止效果是实现了,但是会出现一个小bug,如果抽屉弹出后下方是有按钮的,那么即使看不见也能被触发。。。
所以,就要通过BottomSheetBehavior的回调函数控制按钮的状态,回避这个bugbehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if(newState==STATE_EXPANDED){
button.setClickable(false);
}
if(newState==STATE_COLLAPSED){
button.setClickable(true);
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {

}
});以上。
PS:安卓所有依赖包的版本号:https://developer.android.google.cn/topic/libraries/support-library/revisions.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android