`

ScrollView里包含GridView应注意的两个问题

阅读更多

      做项目中经常会遇到ScrollView包含GridView或者ListView的问题,这其中一定会遇到两个问题:

 

1.GridVIew或者ListVIew内容显示不全的问题

 

解决方案: 

自定义GridView或者ListView,并重写其onMeasure方法,并在布局问题中使用自定义的GridView:

 

import android.content.Context;

import android.util.AttributeSet;

import android.widget.GridView;

 

public class MyGridView extends GridView {

 

public MyGridView(Context paramContext)

 {

   super(paramContext);

 }

 

 public MyGridView(Context paramContext, AttributeSet paramAttributeSet)

 {

   super(paramContext, paramAttributeSet);

 }

 

public MyGridView(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

}

 

@Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 

int expandSpec = MeasureSpec.makeMeasureSpec( Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);

super.onMeasure(widthMeasureSpec, expandSpec); 

}

}

 

2.定位到GridView或者ListView的地方开始显示

       在ScrollView中嵌套了GridView或者ListView,每次启动或者再次唤醒activity的时候,就默认显示GridView了,并不是ScrollView的顶部位置开始显示,这是由于系统原因造成的。

 

解决方案:

在Activity的OnResume方法中添加一段代码即可

 

  1. @Override  
  2. protected void onResume() {  
  3.     // TODO Auto-generated method stub  
  4.     scrollView.smoothScrollTo(0, 0);  
  5.     super.onResume();  

 

网上也有解决办法,比如这个scrollView默认显示最下方内容

 

       ScrollView 有一个方法scollTo(int, int)用来指定滚动条的位置。如果你尝试过,你会发现它是无效的。

因为scollTo()在Scrolliew内的内容加载完成后才能执行。所以我们这样设置滚动条的位置:

 

ScrollView mScrollView = findViewById(R.id.svid);

mScrollView.post(new Runnable() {   
    public void run() {  
        mScrollView.scrollTo(0, 1000);  
    }   
});  

 

scrollTo(int, int);方法生效啦。

 

他的办法可行,但是如果仔细看的话,会发现界面有个跳动,一闪一下。影响用户体验。

 

参见:http://bbs.csdn.net/topics/370110067

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics