自定义底页:应如何工作

前言


不久前,我阅读了一篇有关“ 底表”的文章在与同事协商之后,我决定在我们的应用程序中实现此功能。 在花了足够的时间教“底页”如何逐步旅行(例如Google地图)之后,我意识到了它的乏味和局限性。 找到了两种解决方案:将所有内容包装在将实时监视拉长窗帘状态的流中,或者重写BottomSheetBehavior类的某些方法(很幸运,Apache 2.0许可证允许您执行此操作)。 我选择了第二个选项,因为它对我来说似乎更可行,现在,根据我的经验,我将尝试告诉您它的结果。 我希望这对某人有用。 好吧,让我们开始吧。


客制化


我跳过了创建项目,向其中添加Google底表的步骤,因为如果您阅读此书,那么您已经克服了以上所有问题。 我们将需要转到BottomSheetBehavior类并将其内容复制到我们创建的新的CustomBottomSheetBehavior类中。 复制后,不要忘了重命名以红色标记的所有内容。 另外,在BottomSheet的.xml文件中,我们应该重命名这一行,以引用我们的新类,结果应该是这样的:


app:layout_behavior="com.my.custombottomsheetexample.CustomBottomSheetBehavior" 

因此,我们有700多行看起来很吓人的Java代码,那么您如何处理它们?
首先,您需要找到onViewReleased()方法:


 public void onViewReleased(@NonNull View releasedChild, float xvel, float yvel) { ... } 

我们只需要更改几行。 我们找到第一个if {...}并将其内容替换为以下代码:


 if (yvel < 0.0F) { currentTop = releasedChild.getTop(); if (currentTop > CustomBottomSheetBehavior.this.halfExpandedOffset) { top = CustomBottomSheetBehavior.this.halfExpandedOffset; targetState = 6; } else { top = 0; targetState = 3; } } 

现在,我们的BottomSheet分两个阶段进行,在中间停止:



高度变化


但这还不是全部,您可以调整平均高度。 为此,请在同一类中找到变量halfExpandedOffset的初始化:


 this.halfExpandedOffset = this.parentHeight / 2; 

当看这条线时,很明显,我们可以随意调整高度,即使是百分比也是如此。 我个人更喜欢这样更改:


 this.halfExpandedOffset = this.parentHeight * 60 / 100; 


我的BottomSheet延伸了主视图高度的40%。 仅此而已!

Source: https://habr.com/ru/post/zh-CN452628/


All Articles