江湖开发者 | Java粉
网站地图
首页> Android> ListView只是显示一行(ListView高度)
2015
12-12

ListView只是显示一行(ListView高度)

ListView只是显示一行(ListView高度)

 

问题1

ListView与ScrollView一起使用的时候,ListView 无法判断高度,因此只会显示一行

 

因此需要手动计算高度。复制下面的方法即可。

 

这个方法放在ListView .setAdapater() 之后执行。

 

public void fixListViewHeight(ListView listView) {  

        // 如果没有设置数据适配器,则ListView没有子项,返回。 

        ListAdapter listAdapter = listView.getAdapter(); 

        int totalHeight = 0;                  

        if (listAdapter == null) {  

            return;  

        }  

        for (int index = 0, len = listAdapter.getCount(); index < len; index++) {    

            View listViewItem = listAdapter.getView(index , null, listView); 

            // 计算子项View 的宽高  

            listViewItem.measure(0, 0);   

            // 计算所有子项的高度和

            totalHeight += listViewItem.getMeasuredHeight();   

        }  

  

        ViewGroup.LayoutParams params = listView.getLayoutParams();  

        // listView.getDividerHeight()获取子项间分隔符的高度  

        // params.height设置ListView完全显示需要的高度   

        params.height = totalHeight+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));  

        listView.setLayoutParams(params);  

    }  

}

 

ListView.setAdapater(); 之后 执行上面这个方法

fixListViewHeight(ListView);

 

问题2

因为有时候ListView中的TextView的内容不同导致每个高度不相同,用上面那个方法后,前几个ListView Item 会正常显示,但最后一Item 可能会显示不全,如果出现这种情况:

 

自定义一个customListView 继承ListView重写其onMeasure();

 

@Override

         protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

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

                     MeasureSpec.AT_MOST); 

             super.onMeasure(widthMeasureSpec, expandSpec); 

                  

         }

 

使用customListView 替换ListView 可解决问题

Java江湖     
全部评论:

表情验证码,看不清楚,换一张

随机文章

云标签

公众号

微信

分享:分享我们的知识;专注:专注个人技术的提升;