当scrollview里面嵌套了一个listview, 然后通过设置一个方法设置了listview的高度,使得ListView能够完整显示。但是会出现另一个情况就是进到这个界面的时候看到的不是最上面 而是ListView的开始位置。
解决办法是使用myScrollView.smoothScrollTo(0,20); 无效时, 在代码里去掉listview的焦点 lv.setFocusable(false);
另外注意ScrollTo 和 smoothScrollTo放在onCreate方法中调用是看不到效果的,需要这样:
Try calling smoothScrollTo
method in calling post
of the view:
ScrollView scrollView = ( ScrollView ) getView (). findViewById ( scrollID );
scrollView . post ( new Runnable () {
@Override
public void run () {
scrollView . smoothScrollTo ( 0 ,( getView (). findViewById ( relativeID )). getTop ());
}
});
或者这样:
new Handler().post(new Runnable() { @Override public void run() { // TODO Auto-generated method stub mainScrollView.smoothScrollTo(0, 0); } });
因为scrollTo方法要等到界面显示完毕才能有效,而view.post方法也是在界面刷新完毕之后才执行的。之所以放在handler里,是为了保证View都已经绘制完成。不然,放在resume()中执行,应该也可以的。smoothScrollTo类似于scrollTo,但是滚动的时候是平缓的而不是立即滚动到某处。另外,smoothScrollTo()方法可以打断滑动动画。
================ (三)番外篇 ==================================================
public static int getHeight(View view)//获得某组件的高度 { int w =View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); int h =View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); view.measure(w, h); returnview.getMeasuredHeight(); }