【问题标题】:LinearLayout overlapping Support CoordinatorLayoutLinearLayout 重叠支持 CoordinatorLayout
【发布时间】:2015-09-05 14:06:08
【问题描述】:

这是我第一次使用 CoordinatorLayout,我并不太明白它是如何工作的。

我的 LinearLayout 与 Toolbar 重叠,就好像我在 FrameLayout 或 RelativeLayout 中一样,我不知道如何告诉它往下走(就像 android:layout_below 和 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。 我的 Layout 不是 RecyclerView,只是一个很长的表单。这样做有意义吗?

【问题讨论】:

  • 结束标记已损坏,因为没有开始标记
  • 弥补我粘贴代码的错误!固定

标签: android android-layout material-design


【解决方案1】:

尝试将您的内容嵌套在 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>

其他资源: http://developer.android.com/reference/android/support/design/widget/AppBarLayout.html

【讨论】:

  • 因为如果您忘记了做全能的layout_behavior,您将很难弄清楚为什么您的操作栏无论如何都在滚动视图下方。我很高兴我找到了这个解决方案,更高兴的是现在Error inflating class android.support.v7.widget.AppCompatSpinner 在我身后(不敢将半不透明的颜色传递给它的背景)。现在我应该回过头来弄清楚为什么我的大多数文本视图会选择主题/特定的 textColor 属性,而其中两个不会。啧啧……真是怀念没有素材和支持疯狂的Android好日子
【解决方案2】:

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

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

就我而言,我的工具栏和导航栏的高度为“?attr/actionBarSize”。所以我只是将片段的顶部和底部边距设置为 "?attr/actionBarSize"

同样,它不如使用线性或相对布局,但我担心如果我们选择这种解决方案,我们会浪费 CoordinatorLayout 的动画。

在工具栏和底部导航栏上:

android:layout_height="?attr/actionBarSize"

在我的片段中:

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

【讨论】:

  • 唯一的坏处是如果你隐藏你的应用栏,那么它“曾经”的空间将不会被填充。看看 insetEdge 和 dodgeInsetEdge
【解决方案3】:

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

CoordinatorLayout 的所有孩子围成一个LinearLayout垂直方向
它对我有用。

【讨论】:

    【解决方案4】:

    让你的应用栏有一个insetEdge 的TOP,你的内容布局有一个dodgeInset 的ALL 或TOP。这将使您的线性布局不会与应用栏重叠。

    【讨论】:

      【解决方案5】:

      来自 developer.android.com

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

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

      【讨论】:

      • 这不是一个真正的答案,你可以引用这个,但你根本没有帮助他和社区。​​span>
      猜你喜欢
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      • 2018-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多