【问题标题】:AppBar Layout Expands Automatically when View visibility is changed from Gone to Visible on runtime当视图可见性在运行时从 Gone 更改为 Visible 时,AppBar 布局会自动扩展
【发布时间】:2019-12-05 13:14:48
【问题描述】:

正如我们从下面的示例中看到的那样,在将视图的可见性从“已消失”更改为“可见”(反之亦然)时,应用栏会自动展开并显示绘制的稀松布。

<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/crl_parent"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white"
    android:fillViewport="true">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/abl_appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent">

        <android.support.design.widget.CollapsingToolbarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:fitsSystemWindows="true"
            app:contentScrim="@drawable/shape_rectangle_grdient_red_yellow"
            app:layout_scrollFlags="scroll|exitUntilCollapsed|snap">

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:layout_collapseMode="parallax">

                <FrameLayout
                    android:id="@+id/fl_class"
                    android:layout_width="match_parent"
                    android:layout_height="@dimen/d_280dp"
                    android:background="@color/colorPlaceholderBg">

                    <ImageView
                        android:id="@+id/iv_class"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:adjustViewBounds="true"
                        android:scaleType="centerCrop"
                        android:src="@color/colorPlaceholderBg" />

                    <ProgressBar
                        android:id="@+id/pb_dp_progress"
                        android:layout_width="@dimen/d_20dp"
                        android:layout_height="@dimen/d_20dp"
                        android:layout_gravity="center"
                        android:visibility="visible" />

                </FrameLayout>

                <RelativeLayout
                    android:id="@+id/rl_toolbar"
                    android:layout_width="match_parent"
                    android:layout_height="@dimen/toolbar_default_height"
                    android:background="@drawable/shape_rectangle_transparent_grey_gradient">

                    <ImageView
                        android:id="@+id/iv_back"
                        ... />




            </RelativeLayout>

            <android.support.v7.widget.Toolbar
                android:id="@+id/tl_toolbar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:fitsSystemWindows="true"
                android:minHeight="@dimen/toolbar_default_height"
                android:visibility="visible"
                app:contentInsetStart="@dimen/d_0dp"
                app:layout_collapseMode="pin">

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

            </android.support.v7.widget.Toolbar>

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

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

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

    </android.support.design.widget.CoordinatorLayout>

这是外部布局的代码。从上面的布局可以看出,图案大多是标准的。我曾尝试在新样本中复制该错误,但没有用。最初的问题似乎是在运行时更改嵌套滚动视图的高度似乎是问题,但事实并非如此。我尝试在单击按钮时设置扩展(假),但效果不佳。

&lt;a href="https://imgur.com/YGTT3oL"&gt;&lt;img src="https://i.imgur.com/YGTT3oL.gif" title="source: imgur.com" /&gt;&lt;/a&gt;

演示 gif 链接在这里:https://i.imgur.com/YGTT3oL.gif

【问题讨论】:

  • 你在隐藏/显示时尝试使用 setExpanded(true/false) 吗?

标签: android android-toolbar android-coordinatorlayout android-collapsingtoolbarlayout android-appbarlayout


【解决方案1】:

在您的 @layout/fragment_class_details_content 中检查是否

app:layout_behavior="@string/appbar_scrolling_view_behavior"

存在于父布局中。

还将 app:layout_scrollFlags="scroll|exitUntilCollapsed|snap" 更改为

app:layout_scrollFlags="scroll|exitUntilCollapsed"

将此属性添加到 CollapsingToolbarLayout

app:toolbarId="@+id/tl_toolbar"

将此属性添加到工具栏:

app:popupTheme="@style/AppTheme.PopupOverlay"

【讨论】:

    【解决方案2】:

    我打赌问题是由 app:layout_scrollFlags="scroll|exitUntilCollapsed|snap" 引起的

    您必须定义滚动时想要的行为,查看这篇文章:https://medium.com/martinomburajr/android-design-collapsing-toolbar-scrollflags-e1d8a05dcb02

    由于我不知道您想要什么行为,请阅读文章并选择自己。隐藏和显示视图会触发这些标志。

    【讨论】:

      【解决方案3】:

      从android.support.design.widget.CollapsingToolbarLayout 中提取您已消失/可见的布局。

      你做了太多的嵌套以避免嵌套和使用约束布局

      【讨论】:

      • - 嵌套不是这里的问题,因为我尝试了减少嵌套的相同方案,但问题仍然存在。 - 提取可见性并在 AppBarLayout 上明确设置也不能解决我的问题。
      猜你喜欢
      • 2016-06-24
      • 1970-01-01
      • 2011-05-01
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-16
      相关资源
      最近更新 更多