Horizo​​ntalscrollview初始偏移值

时间:2011-03-01 12:46:26

标签: android scrollview

如何设置Horizo​​ntalScrollView的初始偏移值?我使用了smoothScrolTo()但它无法正常工作。

请帮忙。

3 个答案:

答案 0 :(得分:10)

使用 View.getViewTreeObserver.addOnGlobalLayoutListener 添加侦听器,以了解何时放置scrollview。在回调中,您可以设置滚动。

在回调中使用removeGlobalOnLayoutListener(this)取消注册以获取更多事件。

scroll.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener(){
   @Override
   public void onGlobalLayout(){
      scroll.getViewTreeObserver().removeGlobalOnLayoutListener(this);
      scroll.scrollTo(x, y);
   }
});

答案 1 :(得分:3)

在onCreate,onStart或onResume期间,您无法调用smoothScrolTo()。试着给这样一个小延迟:

public void onResume() {
    super.onResume();
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            HorizontalScrollView sv = (HorizontalScrollView)findViewById(R.id.ScrollView01);
            sv.smoothScrollTo(1000, 0);
        }
    }, 100);
}

这对我有用,但任何人都知道更好的时间(例如在听众中)调用smoothScrollTo?

答案 2 :(得分:0)

另一种解决方法是通过xml。

诀窍是将“Spaces views”添加为 Horizo​​ntalScrollView 的子项,并将它们的宽度设置为您想要的偏移量。

示例:

<!--BUTTONS ON HORIZONAL SCROLL -->
    <HorizontalScrollView
        android:id="@+id/scroll_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:id="@+id/scroll_view_child_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <!-- This View does the trick! -->
            <Space
                android:layout_width="16dp"
                android:layout_height="match_parent" />

            <Button
                android:id="@+id/btn_1"
                style="@style/HorizontalScrollButtons"
                android:text="Btn1" />

            <Button
                android:id="@+id/btn_2"
                style="@style/HorizontalScrollButtons"
                android:text="Btn1" />

            <!-- Keep adding buttons... -->

            <!-- This View does the trick too! -->
            <Space
                android:layout_width="16dp"
                android:layout_height="match_parent" />


        </LinearLayout>

    </HorizontalScrollView>

在示例中,我想要一个16dp的“边距”,所以我给空间查看16dp的宽度

它会给这个...... The way we want

......而不是...... enter image description here

......作为起始视图。