gpt4 book ai didi

android - CoordinatorLayout (CL) : NSV Not at Top When Loaded 中的 NestedScrollView (NSV)

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:02:45 24 4
gpt4 key购买 nike

我在 CL 中使用 NSV,以便在 NSV 向下滚动时压缩工具栏。我遇到的问题是我的 NSV 在加载时没有滚动到顶部,相反,它从 NSV 的顶部偏移了相当大的距离(我不确定这个间距来自哪里,它不在布局)。

请看一下屏幕截图,第一个显示了 NSV 的加载方式,通过比较第二个(当我手动将 NSV 滚动到顶部时),您可以清楚地看到 NSV 从顶部向下滚动了很多):

When NSV loads, it's not at the top NSV scrolled to the top manually for comparison sake

我对这个布局做了一些更新,它导致了这种情况的发生,以前,它加载在顶部没有问题。但是,我没有添加任何应该导致这种情况的间距。

这是我为此使用的布局:

<android.support.design.widget.CoordinatorLayout
android:id="@+id/cl_goal_detail"
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="0dp"
android:layout_weight="1">

<android.support.design.widget.AppBarLayout
android:id="@+id/abl_goal_detail"
android:layout_width="match_parent"
android:layout_height="144dp"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar_goal_detail"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/content_space_double"
app:collapsedTitleTextAppearance="@style/title.dark"
app:expandedTitleTextAppearance="@style/display3.plus.dark"
app:layout_scrollFlags="scroll|exitUntilCollapsed">

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_goal_detail"
style="@style/toolbar"
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>

<android.support.v4.widget.NestedScrollView
android:id="@+id/nsv_goal_detail"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/content_space_half"
android:paddingLeft="@dimen/content_space_half"
android:paddingRight="@dimen/content_space_half"
app:layout_behavior="@string/appbar_scrolling_view_behavior">

<FrameLayout
android:id="@+id/container_goal_detail"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="fill_vertical"/>
</android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>

如有任何想法,我们将不胜感激!

最佳答案

好的!在对我的布局和 Fragment 的每个组件进行整整一天的调试之后,我确定了我认为是错误的地方。

首先,问题:事实证明,NSV 的 subview 中的元素在运行时将可见性更改为 View.GONE 会导致列表向下滚动。我注意到列表滚动到可见性被切换的元素上方(包括 View 上设置的任何边距)。

其次,修复:我通过在 xml 布局中将所有 View 设置为具有 android:visibility="gone"来修复此问题,然后根据需要切换每个 View 的可见性。以前,默认情况下 View 是可见的,然后我从那里开始工作。我只需要改变我的逻辑,从它们全部消失开始,不是很困难。

我认为这是可行的,因为当在 onCreateView() 中创建 NSV 时,您要在运行时隐藏的 View 不会构成整体高度计算的一部分。一旦 fragment 通过 onCreateView() 就可以安全地动态更改 View ,但是,如果 View 作为 onCreateView() 中的高度的一部分进行计算,然后用 View.GONE 隐藏,测量结果会不稳定,您最终会得到一个列表显着向下滚动。

关于android - CoordinatorLayout (CL) : NSV Not at Top When Loaded 中的 NestedScrollView (NSV),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31234479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com