Как сохранить состояние прокрутки при изменении ориентации в Android - PullRequest
0 голосов
/ 05 октября 2010

Я создал одно пользовательское представление, которое содержит представление horizontalscroll.Теперь, когда я меняю ориентацию, его состояние прокрутки каждый раз меняется на 0.

Я получил предыдущее состояние прокрутки, используя onSaveInstanceState(Bundle savedInstanceState) и onRestoreInstanceState(Bundle savedInstanceState)onRestoreInstanceState я использую следующий метод, чтобы изменить положение свитка,

hoz_scroll.scrollTo(hoz_x_pos, hoz_scroll.getScrollY());

Но никакого эффекта нет.Помощь приветствуется.Спасибо.

Ответы [ 4 ]

3 голосов
/ 05 октября 2010

Если вам нужно вызывать onCreate каждый раз, когда ориентация меняется, позиция сбрасывается.Вы можете избежать этого, добавив ориентацию, измененную в манифест, но не уверены, что текущее состояние прокрутки не повреждено.Я исследовал его пару дней назад. Если ваш интерфейс имеет стандартные размеры для каждой ориентации, вы можете найти уравнение, выбрав много значений прокрутки.

Создайте карту с помощью getScrollY () со значениями ландшафта и портрета.который отображает тот же текст.Чем больше ценностей, тем лучше.Затем используйте полиномиальную интерполяцию, чтобы создать полиномиальное уравнение, используя matlab или papper.Больше значений -> больше точности http://en.wikipedia.org/wiki/Polynomial_interpolation

также необходимо выполнить прокрутку до позиции

hoz_scroll.post(new Runnable() {

    public void run() {
        scroller.scrollTo(hoz_x_pos,hoz_scroll.getScrollY());
    }
});
2 голосов
/ 05 октября 2010

Я считаю, что вам нужно установить

android:configChanges="orientation"

в элементе вашей активности в AndroidManifest.xml.

Тогда вам нужно переопределить public void onConfigurationChanged(Configuration config) в своей деятельности.

0 голосов
/ 29 января 2014

вот рабочее решение:

private ScrollView scroll;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_content);


    TextView title=(TextView) findViewById(R.id.textView1);
    TextView content=(TextView) findViewById(R.id.textView2);

    title.setText(getIntent().getStringExtra("title"));
    content.setText(getIntent().getStringExtra("content"));

    scroll = (ScrollView) findViewById(R.id.scrollView1);
    if(savedInstanceState!=null){
        final int y=savedInstanceState.getInt("position");
        scroll.post(new Runnable() {

            public void run() {
                scroll.scrollTo(0,y);
            }
        });
    }
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("position", scroll.getScrollY());
}
0 голосов
/ 19 января 2011

Поместите этот код в свою активность, чтобы он не прокручивался при изменении ориентации. Вам даже не нужно кодировать.

@Override
public void onConfigurationChanged(Configuration config){
    super.onConfigurationChanged(config);
}
...