【问题标题】:How to override initial position of Android ScrollView?如何覆盖 Android ScrollView 的初始位置?
【发布时间】:2016-10-18 09:56:57
【问题描述】:

我的 ViewPager 片段中有一个 scrollView。我想将初始 scrollView 位置设置为 (0,100)。

我尝试在onCreateView() 中设置scrollView.scrollTo(0,100)。它没有用。

然后我在 Handler 中尝试了同样的方法,它工作了,但它只在 (0,0) 之后滚动到 (0,100),导致 scrollView 的抖动很小,这对用户体验很不利。

有什么方法可以让滚动视图直接滚动到 (0,100) 而不是 (0,0)?或者 scrollView 中是否有任何方法可以检测初始滚动事件?

P.S :我看到了here 的问题,这也与我的相同,但接受的答案对我不起作用。

任何帮助将不胜感激。 谢谢

【问题讨论】:

  • 由于您的滚动视图位于片段内,您可能在错误的位置调用该方法,因为这些方法应该有效。如果没有你在做什么的真实例子,就帮不上什么忙了。
  • 您找到解决方案了吗?我也有同样的问题

标签: android android-fragments android-viewpager scrollview android-scrollview


【解决方案1】:

您可以在滚动视图的内部布局的第一个子级上使用 requestFocus 来代替 scrollTo。

例子:

  <ScrollView>

    <LinearLayout>

        <TextView
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:tag="ScrollTopTag" />
        //***rest of your layout***//
    </LinearLayout>

</ScrollView>

在您想要滚动到滚动视图顶部的活动中添加以下行

查看视图 = findViewByTag("ScrollTopTag); view.requestFocus();

【讨论】:

  • 你能在这里评论你修改的布局吗?
  • 您好,感谢您的回答。 View view1 = scrollView.getChildAt(scrollView.getChildCount()-1); view1.setFocusable(true); view1.setFocusableInTouchMode(true); view1.requestFocus();我相信这就是你所说的,但对我没有用。就像我之前所说,scrollTo 在 Handler 中工作正常,它滚动到所需的位置。所以 scrollTo() 方法没有问题。如果你调用 scrollTo(0,100) 会出现问题,它首先滚动到 (0,0),然后才滚动到 (0,100)。
【解决方案2】:

感觉就像您在适配器内部膨胀视图而不回收它们。这可以解释断断续续的加载时间。除此之外,从示例中,尝试进一步延迟它。在示例中,它使用 250 毫秒,但如果您的列表视图未完成加载,则它不会滚动到任何地方,因为它尚未填充。我会开始,但首先将持续时间增加到大约 2000 毫秒,看看它是否有效。如果可行,我会回到您的适配器类并确保每个视图都在回收而不是重新膨胀。

【讨论】:

  • 但问题是,它只有在初始位置(0,0)之后才会滚动到所需位置。我想覆盖那个初始位置。它会导致小混蛋。我没有实施回收部分。我只是在重新膨胀视图
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-17
  • 1970-01-01
  • 2011-02-28
  • 1970-01-01
相关资源
最近更新 更多