ScrollView中使用ListView时页面无法从头显示的解决办法

当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()方法可以打断滑动动画。初始化时,Handler内的方法是会在onCreate方法执行完成之后才执行的。简单的打印观察就可以发现。View的绘制过程是:onMeasure(计算)、onLayout(布局)、onDraw(绘制)。


================ (三)番外篇 ==================================================


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


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值