有关Behavior的一点随笔

虽然Behavior的机制已经出现很久了,但是以前就只是听过,所以这几天趁有空闲时间稍微进行一下了解。


在正文之前,需要着重声明的一点就是:
这里写图片描述

开始,是通过这一篇文章进行基本的了解CoordinatorLayout高级用法-自定义Behavior 对Behavior有了一个基本的使用了解。


之后又稍微进一步了解,我是基于这一篇文章(深入理解CoordinatorLayout.Behavior 涉及了相关的Android源码)进行的(同时也参考了该篇文章学习CoordinatorLayout你需要知道的那些事),里面提及的一般内容我就不再赘述了,而是在写下一些关于学习该篇博客之后的见解与想法。

1、首先是在实现“某个view监听另一个view的状态变化”的过程中,使用到了自定义属性(个人揣测该属性应该自定义为auchor_id的,因为不存在aucher的单词写法,原谅我强迫症犯了):

app:aucher_id

<declare-styleable name="MyCustomStyle">
    <attr name="anchor_id" format="integer|reference"/>
</declare-styleable>

之所以用到这一属性,是为了在layoutDependsOn(CoordinatorLayout parent, View child, View dependency) 方法中实现对目标View的依赖。在本次的代码实例中,是为了实现底部的LinearLayoutLin布局对于AppBarLayout的依赖。

<LinearLayout
        ......
        app:anchor_id="@id/appbar"
        app:layout_behavior="com.example.zero.behaviortest.MyCustomBehavior">

        ......
    </LinearLayout>

可以看到在LinearLayout布局中使用了app:anchor_id属性,并设置为AppBarLayout的id,之后在自定义的MyCustomBehavior中获取该属性的值,然后就可以在layoutDependsOn(CoordinatorLayout parent, View child, View dependency)中进行比较判定。

当然,正如那篇文章中提到的,
这里写图片描述
如果直接return dependency instanceof AppBarLayout,就不需要再如上述情况使用aucher_id了。

还有一点需要注意的是,在实现底部导航栏的滑动隐藏时,直接依赖于AppBarLayout的,而AppBarLayout又是依赖于NestedScrollView的,但AppBarLayout的隐藏是已经实现封装好了的
这里写图片描述所以不要再另外去像上面一样实现了(只需要在Toolbar中设置app:layout_scrollFlags属性),而底部导航栏的隐藏就只能自己去实现了。因此,有些人不要疑惑,为什么AppBarLayout会自动隐藏了,而LinearLayout布局又需要如此去实现隐藏。


2、有关某个view监听CoordinatorLayout内NestedScrollingChild的接口实现类的滑动状态这一部分的讲解,说得白话一点,举个例子如果想要监听某一个CoordinatorLayout的直接子View的滚动状态,从而实现AppBarLayout的隐藏或显示的话,则该View需要实现NestedScrollingChild接口,否则,是无法正常实现的,就如滑动一个WebView时,是无法正常实现前面所说的情形的,因此可以嵌套一个NestedScrollView。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值