码迷,mamicode.com
首页 > 其他好文 > 详细

解决ScrollView下嵌套ListView、GridView显示不全的问题(冲突)

时间:2014-07-16 20:53:42      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:android   style   blog   http   java   使用   

原文地址:http://blog.csdn.net/cs_li1126/article/details/12906203

一.使用网上用的动态改变listview高度的方法,该方法只适用于item布局是LinearLayout布局的情况,不能是其他的,因为其他的Layout(如RelativeLayout)没有重写onMeasure(),所以会在onMeasure()时抛出异常。所以使用限制较大。

 

 

[java] view plaincopy
 
  1. public class Utility {  
  2. public static void setListViewHeightBasedOnChildren(ListView listView) {  
  3. //获取ListView对应的Adapter  
  4. ListAdapter listAdapter = listView.getAdapter();   
  5. if (listAdapter == null) {  
  6. // pre-condition  
  7. return;  
  8. }  
  9.   
  10. int totalHeight = 0;  
  11. for (int i = 0, len = listAdapter.getCount(); i < len; i++) { //listAdapter.getCount()返回数据项的数目  
  12. View listItem = listAdapter.getView(i, null, listView);  
  13. listItem.measure(0, 0); //计算子项View 的宽高  
  14. totalHeight += listItem.getMeasuredHeight(); //统计所有子项的总高度  
  15. }  
  16.   
  17. ViewGroup.LayoutParams params = listView.getLayoutParams();  
  18. params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));  
  19. //listView.getDividerHeight()获取子项间分隔符占用的高度  
  20. //params.height最后得到整个ListView完整显示需要的高度  
  21. listView.setLayoutParams(params);  
  22. }  
  23. }  


二.网上有帖子说在ScrollView中添加一属性 android:fillViewport="true" ,这样就可以让ListView全屏显示了。在我机器上测试失败了。

 

 

三:重写ListView、gridView(推荐)

重写ListView:

 

[java] view plaincopy
 
  1. public class MyListView extends ListView {  
  2.   
  3.     public MyListView(Context context) {  
  4.         // TODO Auto-generated method stub  
  5.         super(context);  
  6.     }  
  7.   
  8.     public MyListView(Context context, AttributeSet attrs) {  
  9.         // TODO Auto-generated method stub  
  10.         super(context, attrs);  
  11.     }  
  12.   
  13.     public MyListView(Context context, AttributeSet attrs, int defStyle) {  
  14.         // TODO Auto-generated method stub  
  15.         super(context, attrs, defStyle);  
  16.     }  
  17.   
  18.     @Override  
  19.     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
  20.         // TODO Auto-generated method stub  
  21.         int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,  
  22.                 MeasureSpec.AT_MOST);  
  23.         super.onMeasure(widthMeasureSpec, expandSpec);  
  24.     }  
  25. }  



 

重写GridView:

 

[java] view plaincopy
 
    1. /** 
    2.  *自定义gridview,解决ScrollView中嵌套gridview显示不正常的问题(1行) 
    3.  */  
    4. public class MyGridView extends GridView{  
    5.       public MyGridView(Context context, AttributeSet attrs) {   
    6.             super(context, attrs);   
    7.         }   
    8.        
    9.         public MyGridView(Context context) {   
    10.             super(context);   
    11.         }   
    12.        
    13.         public MyGridView(Context context, AttributeSet attrs, int defStyle) {   
    14.             super(context, attrs, defStyle);   
    15.         }   
    16.        
    17.         @Override   
    18.         public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {   
    19.        
    20.             int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,   
    21.                     MeasureSpec.AT_MOST);   
    22.             super.onMeasure(widthMeasureSpec, expandSpec);   
    23.         }   
    24. }  

解决ScrollView下嵌套ListView、GridView显示不全的问题(冲突),布布扣,bubuko.com

解决ScrollView下嵌套ListView、GridView显示不全的问题(冲突)

标签:android   style   blog   http   java   使用   

原文地址:http://www.cnblogs.com/zyppac/p/3836442.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!