【问题标题】:Collapsing Toolbar Layout expand on click event and not on scroll折叠工具栏布局在单击事件而不是滚动时展开
【发布时间】:2016-01-07 15:53:36
【问题描述】:
我有一个简单的工具栏,右侧有一个信息图标项。
单击该项目时,我想用动画扩展工具栏。带有新视图和 FAB 按钮。
就像 Textra SMS 正在做的那样。
在展开的工具栏外点击时,我想收起工具栏。
我想知道如何使用 CollapsingToolbarLayout 处理这个问题?是否可以?
我在网上找到的所有示例都随着视图的滚动而折叠/展开(Recyclerview、Scrollview 等......)。但我不希望我的工具栏在滚动视图时移动。
CollapsingToolbarLayout 好用吗?还是我需要自己做这一切?
【问题讨论】:
标签:
android
toolbar
android-collapsingtoolbarlayout
【解决方案1】:
CollapsingToolbarLayout 似乎非常适合这个用途(我实际上相信它会让您的布局看起来比 Textra SMS 应用程序中的布局更好)。
您将需要一些东西:
-
一种禁用CollapsingToolbarLayout 的方法。我认为最好的方法(至少是迄今为止我发现的最好的方法)是使用自定义的CoordinatorLayout 而不是常规的CoordinatorLayout。
public class DisableableCoordinatorLayout extends CoordinatorLayout {
private boolean mPassScrolling = true;
public DisableableCoordinatorLayout(Context context) {
super(context);
}
public DisableableCoordinatorLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public DisableableCoordinatorLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public boolean onStartNestedScroll(View child, View target, int nestedScrollAxes) {
return mPassScrolling && super.onStartNestedScroll(child, target, nestedScrollAxes);
}
public void setPassScrolling(boolean passScrolling) {
mPassScrolling = passScrolling;
}
}
-
您实际上需要禁用您的CollapsingToolbarLayout(您不希望您的CollapsingToolbarLayout 再对滚动做出反应):
mDisableableCoordinatorLayout.setPassScrolling(false);
-
您需要使用您的AppBarLayout 展开CollapsingToolbarLayout onOptionsMenu 项点击
mAppBarLayout.setExpanded(true, true);
-
您还需要在点击外部时使用AppBarLayout 折叠CollapsingToolbarLayout(以您喜欢的任何方式实现点击外部)
mAppBarLayout.setExpanded(false, true);