CoordinatorLayout的内容溢出

时间:2016-04-08 16:59:05

标签: android android-fragments android-coordinatorlayout

我对CoordinatorLayout Fragment有一个问题,当我切换片段时,内容不在其容器中。

这是一个没有ViewPager的基于Tab的应用程序。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@android:id/tabcontent"
        android:layout_width="match_parent"
        android:layout_height="0px"
        android:layout_weight="1"
        android:background="@android:color/white" />

    <com.toto.views.widgets.TabLayoutWrapper
        android:id="@+id/tab_layout_wrapper"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/deepGreen">

        <View
            android:id="@+id/tab_indicator"
            android:layout_width="35dp"
            android:layout_height="35dp"
            android:layout_centerVertical="true"
            android:background="@color/darkGreen"/>

        <android.support.design.widget.TabLayout
            android:id="@+id/tab_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabIndicatorColor="@color/deepGreen"
            app:tabBackground="@drawable/tab_background"
            app:tabGravity="fill"/>
    </com.toto.views.widgets.TabLayoutWrapper>
</LinearLayout>

我的每个标签都是CoordinatorLayout。我隐藏了recyclerView,如果那里没有项目,并显示一个漂亮的&#34;空图画&#34;

<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:splitMotionEvents="false" >

    <include layout="@layout/app_bar" />


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

        <com.toto.views.recyclerView.ConversationListRecyclerView
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            android:id="@+id/conversation_list"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <LinearLayout
            android:id="@+id/empty"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal"
            android:gravity="center"
            android:background="@color/palerGreen">
                <ImageView
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1"
                   android:src="@drawable/grp_kevin_harry_clap"/>
        </LinearLayout>


        <LinearLayout
            android:id="@+id/loading"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal"
            android:gravity="center"
            android:background="@color/purple">
                <ImageView
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1"
                    android:src="@drawable/wait"/>
        </LinearLayout>
    </FrameLayout>


    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        app:layout_anchor="@+id/app_bar"
        android:src="@drawable/icon_plus"
        style="@style/FloatingActionButton.Plus"/>
</android.support.design.widget.CoordinatorLayout>

LinearLayout都被简化了。我找到了一种方法,使其适合容器内的:

    @Override
    public void onResume() {
        super.onResume();
        AppBarLayout appbar = (AppBarLayout) getView().findViewById(R.id.app_bar);
        FrameLayout frameLayout = (FrameLayout) getView().findViewById(R.id.frame);
        CoordinatorLayout coordinator = (CoordinatorLayout) getView();
        CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) frameLayout.getLayoutParams();
        CoordinatorLayout.Behavior behavior = params.getBehavior();
        behavior.onNestedFling(coordinator, appbar, null, 0, -1000, true);
    }

但问题是,我们看到整个视图在更改标签时移动。我检查CoordinatorLayout的大小,它等于整个屏幕减去TabLayout。所以内容设计得不好。 任何建议来修复&#34;动画&#34;到没有动画&#34;或者是否有另一种方法可以使用ViewGroup隐藏RecyclerView? 我的目标是至少API 19。

PS:改变ViewPager的架构还不是一种选择。

0 个答案:

没有答案