【问题标题】:How to show collapsed elements in CoordinatorLayout programmatically?如何以编程方式在 CoordinatorLayout 中显示折叠的元素?
【发布时间】:2015-08-25 16:42:06
【问题描述】:

我有CoordinatorLayout,如博客中所述:http://android-developers.blogspot.ru/2015/05/android-design-support-library.html

<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.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

  <android.support.design.widget.AppBarLayout
          android:layout_width="match_parent"
          android:layout_height="wrap_content">
     <android.support.v7.widget.Toolbar
              ...
              app:layout_scrollFlags="scroll|enterAlways">

     <TextView
              ...
              app:layout_scrollFlags="scroll|enterAlways">
   </android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>

AppBarLayout 内部,我有ToolbarTextView 以及其他状态信息。 AppBarLayout 可以折叠(滚动后)。有时我需要显示AppBarLayout 以显示更改的状态。

如何以编程方式进行?

【问题讨论】:

    标签: android android-layout material-design android-appbarlayout coordinator-layout


    【解决方案1】:

    other comment中所述:

    使用支持库 v23,您可以致电 appBarLayout.setExpanded(true/false)

    【讨论】:

    • 为什么这不被接受为答案?完美运行。
    【解决方案2】:

    由于来自Tuấn Trần Anh,创建here,您可以使用这两种方法以编程方式折叠和扩展CoordinatorLayout

    public void collapseToolbar(){
        CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appbarLayout.getLayoutParams();
        behavior = (AppBarLayout.Behavior) params.getBehavior();
        if(behavior!=null) {
            behavior.onNestedFling(rootLayout, appbarLayout, null, 0, 10000, true);
        }
    }
    
    public void expandToolbar(){
        CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appbarLayout.getLayoutParams();
        behavior = (AppBarLayout.Behavior) params.getBehavior();
        if(behavior!=null) {
            behavior.setTopAndBottomOffset(0);
            behavior.onNestedPreScroll(rootLayout, appbarLayout, null, 0, 1, new int[2]);
        }
    }
    

    【讨论】:

      【解决方案3】:

      就我而言,我使用此解决方案

       public void resetAppBarLayout() {
          if (mContentContainer != null) {
              final AppBarLayout.ScrollingViewBehavior container_behavior = ((AppBarLayout.ScrollingViewBehavior)
                      ((CoordinatorLayout.LayoutParams) mContentContainer.getLayoutParams()).getBehavior());
              if (container_behavior != null) {
                  container_behavior.setTopAndBottomOffset(appBarLayout.getTotalScrollRange());
              }
              final AppBarLayout.Behavior appbar_behavior = ((AppBarLayout.Behavior)
                      ((CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams()).getBehavior());
              if (appbar_behavior != null) {
                  appbar_behavior.setTopAndBottomOffset(0);
              }
          }
      }
      

      用于强制显示 appbarlayout。将滚动视图重置为 appbarLayout 最大滚动范围,并将 appBarLayout 重置为起始位置 = 0。

      【讨论】:

        猜你喜欢
        • 2020-08-25
        • 1970-01-01
        • 1970-01-01
        • 2019-10-15
        • 2011-05-17
        • 2016-03-01
        • 2020-03-27
        • 2022-08-15
        • 1970-01-01
        相关资源
        最近更新 更多