如何设置HorizontalScrollView的初始偏移值?我使用了smoothScrolTo()但它无法正常工作。
请帮忙。
答案 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”添加为 HorizontalScrollView 的子项,并将它们的宽度设置为您想要的偏移量。
示例:
<!--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的宽度。
......作为起始视图。