如何在方向更改时设置滚动条位置?

时间:2015-09-13 21:22:45

标签: android scrollview orientation

当我执行方向更改时,滚动视图有时会重新定位,因此我丢失了标题(例如Chol Of Cholcolates ...)我的视图的文本视图。

这就是我想要的。

enter image description here

当我执行方向更改时,我会丢失标题视图。

enter image description here

这是我的滚动视图布局。

<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_margin="0dp"
    android:scrollbars="vertical"
    android:fillViewport="true"
    android:scrollbarAlwaysDrawVerticalTrack="true"
    android:id="@+id/scrollview">
    <LinearLayout
        style = "@style/Activity"
        android:keepScreenOn="false"
        android:paddingBottom="0dp"
        android:id="@+id/recipe_view" >

        <TextView
            android:id="@+id/name"
            style="@style/name"
            android:hint="@string/recipe_title"
            />
        <TextView
            android:id="@+id/instructions"
            style="@style/instructions"
            android:gravity="start"
            android:hint="@string/recipe_instructions"
            />
    </LinearLayout>

</ScrollView>

在片段的onCreateView()中,我正在调用

  // correct the position of the scrollview
  mView.findViewById(R.id.recipe_view).scrollTo(0, 0);

无效。

问题似乎是随机的。有时滚动条会将标题推出视图,有时则不会。

1 个答案:

答案 0 :(得分:0)

当方向改变时,您可以保存和恢复滚动位置。

将当前位置保存在onSaveInstanceState:

protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putIntArray("ARTICLE_SCROLL_POSITION",
        new int[]{ mScrollView.getScrollX(), mScrollView.getScrollY()});}

并在onRestoreInstanceState中恢复它:

protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
final int[] position = savedInstanceState.getIntArray("ARTICLE_SCROLL_POSITION");
if(position != null)
    mScrollView.post(new Runnable() {
        public void run() {
            mScrollView.scrollTo(position[0], position[1]);
        }
    });}

<强> - 或 -

非hacky方式是将android:configChanges="keyboardHidden|orientation|screenSize"放入AndroidManifest.xml中该特定活动的标记中,并自行处理活动娱乐内容。