如何在android中定向更改时保持滚动状态

时间:2010-10-05 11:40:15

标签: android user-interface android-widget

我创建了一个包含horizo​​ntalscrollview的自定义视图。现在当我改变方向时,它的滚动状态每次都变为0。

我使用onSaveInstanceState(Bundle savedInstanceState)onRestoreInstanceState(Bundle savedInstanceState)获得了之前的滚动状态。在onRestoreInstanceState我正在使用以下方法来重新定位滚动,

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

但根本没有效果。 帮助赞赏。感谢。

4 个答案:

答案 0 :(得分:3)

如果每次方向更改时都必须调用onCreate,则位置会重置。 您可以通过添加更改为清单的方向来避免它,但不确定当前滚动状态是否完好。 我几天前研究过它。如果你的界面在每个方向上都有stadar维度,那么你可以通过抽取很多滚动值找到一个方程式。

使用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());
    }
});

答案 1 :(得分:2)

我相信你需要设置

android:configChanges="orientation"

AndroidManifest.xml的活动元素中。

然后您需要覆盖活动中的public void onConfigurationChanged(Configuration config)

答案 2 :(得分:0)

将此代码放入Activity中,以便在方向更改时不滚动它。你甚至不需要编码。

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

答案 3 :(得分:0)

这是一个有效的解决方案:

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());
}