当前位置: 首页 > 知识库问答 >
问题:

使用嵌套滚动视图文本视图

赏阳嘉
2023-03-14

我可以向您展示比告诉您更好的内容,所以这里是我的XML代码的结构:

<android.support.design.widget.CoordinatorLayout
    <!-- The upper part of the layout -->
    <android.support.design.widget.AppBarLayout
       <android.support.design.widget.CollapsingToolbarLayout
          <!-- some code inside -->
        </android.support.design.widget.CollapsingToolbarLayout>
      <android.support.design.widget.TabLayout/>
    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
      app:layout_behavior="@string/appbar_scrolling_view_behavior"
      android:layout_width="match_parent"
      android:layout_height="wrap_content">
    </android.support.v4.view.ViewPager>
</android.support.design.widget.CoordinatorLayout>

因此,如您所见,我有一个ViewPenger,其中包含片段并支持滚动。

问题:
我有几个片段,每个片段都有自己的布局,应该在一次放纵中向下滚动。

一切都很完美,一切都可以顺利滚动,但是当我添加一个 TextView 并使用 NestedScrollView 包装它时,它无法正常工作。当我向下滚动时,将手指从屏幕上移开后,它会立即停止。

看看代码:

<android.support.v4.widget.NestedScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <TextView
        android:text="@string/content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/castList"
        android:nestedScrollingEnabled="false"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

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

</LinearLayout>

如果删除文本视图,它可以工作。

你知道那可能是什么吗?

谢谢你!

共有1个答案

柳涵映
2023-03-14

我已经解决了这个问题,但是,它有一个缺陷。当您一直向下拖动NestedScrollView时,您可以看到AppBarLayout的轻微抖动。

以下是我的解决方案:

public class FixedScrollingBehavior extends AppBarLayout.Behavior{

private boolean isPositive;

public FixedScrollingBehavior() {
}

public FixedScrollingBehavior(Context context, AttributeSet attrs) {
    super(context, attrs);
}

@Override
public boolean onNestedFling(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, float velocityX, float velocityY, boolean consumed) {
    if(velocityY<0 && isPositive){
        velocityY*=-1;
    }
    return super.onNestedFling(coordinatorLayout, child, target, velocityX, velocityY, isPositive);
}

@Override
public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dx, int dy, int[] consumed) {
    isPositive = dy > 0;
    if(target instanceof NestedScrollView) {
        if (dy > 20 && dy < 50 && isPositive) {
            dy = 250;
        } else if (dy > 50) {
            dy*=5;
        }
    }
    super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed);
}

}

然后在XML文件中应用该行为:

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layout_behavior=".utils.FixedScrollingBehavior"
    android:fitsSystemWindows="true">

同样,当您拉动<code>NestedScrollView</code>时也会出现错误,但这总比什么都没有好。

 类似资料:
  • 我使用嵌套的Scrollview来包装recyclerview和其他按钮。它工作得很好,但我注意到当我滚动它时,它并不平滑。请指导如何使滚动平滑。

  • 我有一个奇怪的问题与和(与设计支持库22.2.0) 使用小于的内容,我应该有一个固定的内容。然而,尝试上下滚动内容,我可以得到内容被移位,再也不会出现在自己的位置上。 这里的代码:

  • 利用UIScrollView实现视差滚动效果。在demo中,滑动ScrollView,背景图和文字的滚动速度不一样。直接用ScrollView 的协议,对其子视图的坐标进行随机系数比例的位置移动修正,从而实现视差滚动效果。没有用其他的框架,代码简单。 作者说:原创Demo 转载请注明出处。 [Code4App.com]

  • 我在嵌套滚动视图中有一个回收器视图。当回收器视图中有太多数据时,滚动会滞后。除了将回收器视图从嵌套滚动视图中删除之外,还有什么方法可以解决这个问题吗?

  • 我有一个水平ScrollView,它有两个元素:CardView和水平RecycerView。所以,当用户水平滚动时,我希望这两个元素滚动。 我想有这样的东西:Goal,橙色的线是CardView,黄色的线是RecycerView。当用户滚动时,两个元素滚动,如下所示:Scrolled Goal。 现在在我的应用程序中,当用户滚动时,只有RecycerView滚动。CardView保持在他的位置。

  • 实现循环ScrollView。有以下特色: 1、循环的scrollview 2、类似于tableview的编程方式 3、可定制化的内容 4、灵活运用可用于移步加载图片 5、结构化,可扩展性高 [Code4App.com]