Android开发底部点击按钮从屏幕底部滑出面板(一)
2018-01-26 17:31
387 查看
最近需要实现一个类似百度地图搜索美食上滑弹出一个覆盖面板。网上也有很多的开源项目像 [Android Sliding Up Panel]
Android的Android Support Library 23.2里的 Design Support Library也有一个新的控件Bottom Sheets。用起来也比较简单。CoordinatorLayout作为父布局 子布局只需要设置layout_behavior就可以了
然后在代码中获取BottomSheetBehavior对象设置参数
peekHeight 是当Bottom Sheets关闭的时候,底部下表我们能看到的高度.
hideable 是当我们拖拽下拉的时候,bottom sheet是否能全部隐藏。
显示、隐藏、折叠效果可以通过设置状态来实现
BottomSheetBehavior为我们提供了5中状态
STATE_COLLAPSED: 关闭Bottom Sheets,显示peekHeight的高度,默认是0
STATE_DRAGGING: 用户拖拽Bottom Sheets时的状态
STATE_SETTLING: 当Bottom Sheets view释放时记录的状态。
STATE_EXPANDED: 当Bottom Sheets 展开的状态
STATE_HIDDEN: 当Bottom Sheets 隐藏的状态
如果你需要监听Bottom Sheets回调的状态,可以通过setBottomSheetCallback来实现,onSlide方法是拖拽中的回调,根据slideOffset可以做一些动画 onStateChanged方法可以监听到状态的改变
这样从屏幕底部滑出面板的效果就实现了
之后领导又想实现bottomSheetBehavior从折叠到完全展开的时候让顶部的搜索框也一起滑动隐藏,从展开到折叠状态时搜索框滑动显示,从折叠到隐藏状态时搜索框不动。这时就想到了之前用到的app:layout_scrollFlags=”scroll|enterAlways” 但是这个属性在和嵌套了Recycleview的bottomSheetBehavior配合使用时会出现Recycleview向下滑动时搜索框就一起向下滑动显示了,放弃这种做法。最后只能从Bottom Sheets回调着手了
其实解决起来也比较简单,将搜索框布局放到最上层。在onSlide回调中通过scrollTo的方式实现
这只是一种解决方法,我在网上也看到好多解决方法还要好好研究一下啊
Android的Android Support Library 23.2里的 Design Support Library也有一个新的控件Bottom Sheets。用起来也比较简单。CoordinatorLayout作为父布局 子布局只需要设置layout_behavior就可以了
<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: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"> </android.support.v4.widget.NestedScrollView> </android.support.design.widget.CoordinatorLayout>
然后在代码中获取BottomSheetBehavior对象设置参数
View mBehiviorView = findViewById(R.id.bottom_sheet); BottomSheetBehavior mBottomSheetBehavior = BottomSheetBehavior.from(behiviorView); mBottomSheetBehavior.setHideable(true); mBottomSheetBehavior.setPeekHeight(height/2);
peekHeight 是当Bottom Sheets关闭的时候,底部下表我们能看到的高度.
hideable 是当我们拖拽下拉的时候,bottom sheet是否能全部隐藏。
显示、隐藏、折叠效果可以通过设置状态来实现
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED)
BottomSheetBehavior为我们提供了5中状态
STATE_COLLAPSED: 关闭Bottom Sheets,显示peekHeight的高度,默认是0
STATE_DRAGGING: 用户拖拽Bottom Sheets时的状态
STATE_SETTLING: 当Bottom Sheets view释放时记录的状态。
STATE_EXPANDED: 当Bottom Sheets 展开的状态
STATE_HIDDEN: 当Bottom Sheets 隐藏的状态
如果你需要监听Bottom Sheets回调的状态,可以通过setBottomSheetCallback来实现,onSlide方法是拖拽中的回调,根据slideOffset可以做一些动画 onStateChanged方法可以监听到状态的改变
bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() { @Override public void onStateChanged(@NonNull View bottomSheet, int newState) { } @Override public void onSlide(@NonNull View bottomSheet, float slideOffset) { } });
这样从屏幕底部滑出面板的效果就实现了
之后领导又想实现bottomSheetBehavior从折叠到完全展开的时候让顶部的搜索框也一起滑动隐藏,从展开到折叠状态时搜索框滑动显示,从折叠到隐藏状态时搜索框不动。这时就想到了之前用到的app:layout_scrollFlags=”scroll|enterAlways” 但是这个属性在和嵌套了Recycleview的bottomSheetBehavior配合使用时会出现Recycleview向下滑动时搜索框就一起向下滑动显示了,放弃这种做法。最后只能从Bottom Sheets回调着手了
其实解决起来也比较简单,将搜索框布局放到最上层。在onSlide回调中通过scrollTo的方式实现
@Override public void onSlide(@NonNull View bottomSheet, float slideOffset) { if(slideOffset > 0) { ((View) header.getParent()).scrollTo(0, (int) ((header.getHeight() + headerMargin) * slideOffset)); } }
这只是一种解决方法,我在网上也看到好多解决方法还要好好研究一下啊
相关文章推荐
- Android开发输入法遮盖屏幕底部按钮(解决方法,亲测可用)
- Android开发 — 实现手指从屏幕底部向上滑动的方式来显示Dialog(可为实现自由拖动Dialog提供参考)
- Android 开发在上传文件时,如何实现点击按钮停止上传?
- Android开发关闭虚拟按钮、底部导航条
- Android开发 点击按钮切换背景的两种方法
- Android仿相册点击屏幕出现标题和底部菜单
- 【转】Android开发20——单个监听器监听多个按钮点击事件
- android中怎样把一个button按钮放到屏幕底部
- Android开发实现按钮点击切换背景并修改文字颜色的方法
- Android对于界面底部N个按钮平分屏幕宽度且保持按钮背景图片不变形的解决方案
- Android开发20――单个监听器监听多个按钮点击事件
- android开发 圆角按钮+点击换色
- Android开发20——单个监听器监听多个按钮点击事件
- android开发 点击按钮弹出对话框的简单实现
- Android开发心得——点击EditText的时候,输入法把整体布局顶出了屏幕?这里提供一个我个人的解决办法
- Android开发点滴 - 如何使按钮水平垂直居中且始终占据屏幕宽度一半
- android在实际开发应用中最常用的按钮点击事件
- android studio弹出窗口太大,超过屏幕的底边框,无法点击下面的按钮?
- Android开发之触摸事件-点击屏幕获…
- android学开发:按钮点击