Behavior使用

278 阅读1分钟

「这是我参与11月更文挑战的第27天,活动详情查看:2021最后一次更文挑战

一、CoordinatorLayout

CoordinatorLayout的主要功能是协调内部各个子控件直接的状态关系,也就是说,可以协调多个View进行互动,比如:移动,动画等。它是通过Behavior。

二、Behavior

是作用于CoordinatorLayout的子View的交互行为插件。Google给我们提供了一些Behavior,我们也可以自己定义Behavior。

  1. BottomSheetBehavior

它是一个从底部弹出一个布局,例如我们经常用的分享功能

1.1 用法

<LinearLayout
android: id= ="@+id/lis tView"
android: 1ayout width="match parent"
android: layout_ height= = "wrap content'
android: layout_ alignParentBottom =" true"
android : background= =" @ color/cffffff"
app : layout_ behavior="@string/bottom sheet_ behavior"app: behavior peekHeight ="0dp '
android: orientation= "vertical ">

<TextView
android: layout width= = "match parent"
android: layout_ height: ="wrap_ content"
android : padding =" @dimen/dp10"
android : layout margin=" @dimen/dp20"
android:text="5- - "
android : background=" @drawable/tv_ background" />

<TextView
android : layout width ="match parent"
android: layout height= "wrap content"
android :padding =" @dimen/ dp10"
android: layout_ margin =" @dimen/dp20"
android: text=",- "
android :background=" @drawable/ tv_ background" />
</ LinearLayout>

注:我们设置了一个Behavior,bottom_sheet_behavior,是系统提供好的一个behavior,如果一开始需要隐藏的话,可以设置app:behavior_peekHeight="0dp"

然后在代码中这样写

if (mBottomSheetBehavior.getState() == BottomSheetBehavior . STATE EXPANDED) {

mBottomSheetBehavior . setState (Bot tomSheetBehavior. STATE COLLAPSED) ;
}
else if(mBottomSheetBehavior . getState() == BottomSheetBehavior . STATE COLLAPSED){ 

fmBottomShee tBehavior . setState (BottomSheetBehavior . STATE_ EXPANDED) ;
}

BottomSheetBehavior有5种状态

(1)STATE_EXPANDED展开状态,显示完整布局。

(2)STATE_COLLAPSED折叠状态,显示peekHeigth 的高度,如果peekHeight为0,则全部隐藏,与STATE_HIDDEN效果一样。

(3)STATE_DRAGGING拖拽时的状态

(4)STATE_HIDDEN隐藏时的状态

(5)STATE_SETTLING释放时的状态

  1. BottomSheetDialog

它是一个Dialog,从底部弹出一个Dialog,比如淘宝商品详情页的立即购买,它是对BottomSheetBehavior的一个封装,是获取一个Behavior,设置一个监听状态的回调,设置了下滑可以隐藏

示例如下:

private void init() {
mBottomSheetDialog-new Bot tomSheetDialog( context: this) ;
View view= LayoutInflater. from (this) . inflate (R. layout. view_ bottomsheet dialog, root: null, attachToRoot: false) ;mBottomSheetDialog. setContentView (view) ;
setRecycleView (view) ;
}