LinearLayout重叠支持CoordinatorLayout

时间:2015-06-19 14:29:07

标签: android android-layout material-design

这是我第一次使用CoordinatorLayout,而我真的不明白它是如何运作的。

我的LinearLayout与我的工具栏重叠,好像我在FrameLayout或RelativeLayout中,我不知道怎么告诉它在下面(像android:layout_below with RelativeLayout)

这是我的代码:

<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/main_content"
    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="192dp"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleMarginEnd="64dp"
            app:expandedTitleMarginStart="48dp"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <ImageView
                android:id="@+id/backdrop"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fitsSystemWindows="true"
                android:src="@drawable/logo2"
                app:layout_collapseMode="pin" />

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/appbar"
        android:orientation="vertical"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin">

            .... Very Large Form ...
    </LinearLayout>
</android.support.design.widget.CoordinatorLayout>

另一个疑问:我看到的几乎所有例子都是使用CoordinateLayout管理RecyclerView。 我的布局不是RecyclerView,只是一个很长的形式。这样做是否有意义?

4 个答案:

答案 0 :(得分:10)

尝试在NestedScrollView中嵌套内容。不要忘记包含layout_behavior XML标记。

 <android.support.v4.widget.NestedScrollView
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         app:layout_behavior="@string/appbar_scrolling_view_behavior">

     <!-- Your scrolling content -->

 </android.support.v4.widget.NestedScrollView>

其他资源: Transaction Controller

答案 1 :(得分:2)

我找到了解决方案。我想这不是最好的解决方案,但是它使一切看起来都不错,并且允许我们继续CoordinatorLayout的动画。

我只是将Fragment的margintTop和marginBot设置为与顶部工具栏和底部导航栏完全相同的DP。

在我的情况下,我的工具栏和导航栏的高度为“?attr / actionBarSize”。所以我只是将片段的顶部和机器人边距设置为“?attr / actionBarSize”

同样,它不如使用线性或相对布局好,但恐怕如果我们选择该解决方案,则会浪费CoordinatorLayout的动画。

在工具栏和BottomNavBar上:

android:layout_height="?attr/actionBarSize"

和在我的片段中:

android:layout_marginTop="?attr/actionBarSize"
android:layout_marginBottom="?attr/actionBarSize"

答案 2 :(得分:0)

迟到的答案,但它可能仍然有助于某人。

CoordinatorLayout的所有儿童纳入LinearLayout垂直方向。 它对我有用。

答案 3 :(得分:-2)

来自developer.android.com

&#34; CoordinatorLayout是一个超级动力的FrameLayout。 CoordinatorLayout用于两个主要用例: 作为顶级应用程序装饰或chrome布局 作为与一个或多个子视图进行特定交互的容器 通过为CoordinatorLayout的子视图指定行为,您可以在单个父级中提供许多不同的交互,并且这些视图也可以相互交互。使用DefaultBehavior批注时,View类可以在用作CoordinatorLayout的子级时指定默认行为。 行为可用于实现各种交互和附加布局修改,范围从滑动抽屉和面板到刷卡可忽略的元素和在其移动和动画时粘附到其他元素的按钮。 CoordinatorLayout的孩子可能有一个锚点。此视图ID必须对应于CoordinatorLayout的任意后代,但它可能不是锚定子项本身或锚定子项的后代。这可用于相对于其他任意内容窗格放置浮动视图。&#34;

因此,您可以将根视图更改为LinearLayout(垂直方向)或使用scrollview,这将线性地排列子项。