appBarLayout上的recyclerView高度折叠无法正常工作

时间:2016-03-21 10:58:51

标签: android android-recyclerview android-appbarlayout

我正在使用如下面的布局文件

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/id_rdp_main_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:id="@+id/id_rdp_headerLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <LinearLayout
                android:id="@+id/id_rdp_bartobehidden"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <include
                    layout="@layout/fragment_rdp_top_bar"
                    android:layout_alignParentTop="true"/>
            </LinearLayout>
        </LinearLayout>

        <LinearLayout
            android:id="@+id/id_rdp_header_linearLayout"
            android:layout_width="match_parent"
            android:layout_height="80dp"
            android:orientation="vertical">

            <RelativeLayout
                android:id="@+id/id_rdp_gray_headerLayout"
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:background="@color/actionbar_background"
                android:paddingLeft="20dp"
                android:paddingRight="20dp">

                <ImageView
                    android:id="@+id/id_rdp_toggle_dashboard_view"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignBottom="@+id/id_rdp_viewToggleList"
                    android:layout_alignParentLeft="true"
                    android:layout_centerVertical="true"
                    android:layout_marginRight="20dp"
                    android:padding="4dp"
                    android:src="@drawable/r_dashboard_selected"/>

                <ImageView
                    android:id="@+id/id_rdp_viewToggleList"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerVertical="true"
                    android:layout_toRightOf="@id/id_rdp_toggle_dashboard_view"
                    android:padding="4dp"
                    android:src="@drawable/list_view_icon_unselected"/>

                <ImageView
                    android:id="@+id/id_rdp_viewToggleGrid"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerVertical="true"
                    android:layout_marginLeft="20dp"
                    android:layout_toRightOf="@+id/id_rdp_viewToggleList"
                    android:padding="4dp"
                    android:src="@drawable/grid_view_icon_unselected"/>

                <TextView
                    android:id="@+id/id_rdp_sortbyTxt"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentRight="true"
                    android:layout_centerVertical="true"
                    android:layout_marginLeft="10dp"
                    android:text="@string/lnr_ldp_sortby"
                    android:textColor="@android:color/white"/>

                <TextView
                    android:id="@+id/id_rdp_header_share_views"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerVertical="true"
                    android:layout_marginRight="10dp"
                    android:layout_toLeftOf="@+id/id_rdp_sortbyTxt"
                    android:paddingRight="10dp"
                    android:singleLine="true"
                    android:text="@string/lnr_ldp_share"
                    android:textColor="@android:color/white"/>
            </RelativeLayout>    
        </LinearLayout>
    </android.support.design.widget.AppBarLayout>

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/id_rdp_gridView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scrollbars="none"
            android:visibility="visible"/>

        <android.support.v7.widget.RecyclerView
            android:id="@+id/id_rdp_gridViewForDashboard"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scrollbars="none"
            android:background="@color/gray_light_with_50_percent_opacity"
            android:visibility="gone"/>
    </FrameLayout>   
</android.support.design.widget.CoordinatorLayout>

我正在更改id_rdp_headerLayout的scollFlags以使其可折叠或不可折叠。来自以下方法。

   private void shouldAppBarCollapsible(boolean shouldCollapsible){
        AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) mHeaderLayout.getLayoutParams();
        if(shouldCollapsible){
            params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL
                    | AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED);
            Log.e("shouldAppBarCollapsible true", "called for shouldCollapsible true");     
        }else {
            Log.e("shouldAppBarCollapsible false", "called for shouldCollapsible false");
            expandAppBar();
            params.setScrollFlags(0);
        }
        mHeaderLayout.setLayoutParams(params);
    }

我对RecyclerView id_rdp_gridViewForDashboard有奇怪的行为,大部分时间我滚动内容recyclelerView高度不会随着Appbar布局的折叠而改变。enter image description here这是默认的Appbar和RecyclerView,灰色背景。

enter image description here

这是滚动回收站视图时的图片。它的高度没有变化。只有灰色区域是RecyclerView的高度,我不知道白色视图是什么,因为它不可滚动。

奇怪的是,有时候在改变Appbar折叠行为时它会起作用。请参见下图。enter image description here

我尝试过很多东西,但是无法弄明白。任何帮助将非常感激。 我正在使用v22.2的设计支持库,由于高级管理的一些限制,我无法将其更新到最新版本。更重要的是,当我不按照语法改变collasing行为时,它完美地运作。

0 个答案:

没有答案