在android应用的开发中,可能会有这样的需求:在一款具有阅读功能的应用中,在打开电子文档、日志等长篇文章后,读了一大段之后,突然返回或者关闭后,等到下一次再打开阅读,依然是保持着上一次的阅读位置,这个情景很人性化。在android中如何实现呢?我在这里就试着说明一个方法,但不是唯一的解决方案。
首先,日志内容一定是在ScrollView中的,假设是如下组件的设定:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ScrollView android:id="@+id/scrollview" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/txt_tv" android:layout_width="match_parent" android:layout_height="wrap_content" /> </ScrollView> </LinearLayout>
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.srcolltest); mHandler = new Handler(); mTextView = (TextView) findViewById(R.id.txt_tv); mScroolView = (ScrollView) findViewById(R.id.scrollview); mTextView.setText(getString(R.string.news_txt)); mTextView.setTextSize(25.00f); //该方法是监控对ScorllView的触碰事件 mScroolView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_MOVE){ Log.i(TAG, "last time scrollY=>"+mScroolView.getScrollY()); } return false; } }); }
在下次获取用户的操作记录后,根据这个数据,使用ScrollView.scrollto(x,y)即可实现。但是使用这个方法不是那样在onCreate里随便一写就能体现效果的。
应该这样做:
@Override protected void onResume() { mHandler.postDelayed(new Runnable() { @Override public void run() { mScroolView.scrollTo(0, lastScrollY); } }, 100); super.onResume(); }好了,基本使用就是这样。如果你有什么更好的方法,欢迎分享。