您的位置:首页 > 移动开发 > Android开发

关于android的ScrollView套listView展示不全的问题

2014-03-14 11:19 381 查看
关于android的ScrollView套listView展示不全的问题,目前网上都是提供setListViewHeightBasedOnChildren这个方法,方法如下:

public static void setListViewHeightBasedOnChildren( ListView listView ) {

// 获取ListView对应的Adapter

ListAdapter listAdapter = listView.getAdapter();

if( listAdapter == null ) {

return;

}

int totalHeight = 0;

for( int i = 0, len = listAdapter.getCount(); i < len; i++ ) { // listAdapter.getCount()返回数据项的数目

View listItem = listAdapter.getView( i, null, listView );

listItem.measure( 0, 0 ); // 计算子项View 的宽高

totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度

}

ViewGroup.LayoutParams params = listView.getLayoutParams();

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

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

// params.height最后得到整个ListView完整显示需要的高度

listView.setLayoutParams( params );

}

但这个方法有很大的问题,如果Item中有文本有多行的话,将也会出现展示不全。

解决方案如下,自定义一个listview

public class NoScrollListView extends ListView {

public NoScrollListView(Context context, AttributeSet attrs) {

super(context, attrs);

// TODO Auto-generated constructor stub

}

public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

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

super.onMeasure(widthMeasureSpec, mExpandSpec);

}

}

<ScrollView

android:id="@+id/scrollview"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:cacheColorHint="#00000000" >

.....

<com.test.NoScrollListView

android:id="@+id/list_m1"

android:layout_width="fill_parent"

android:background="@android:color/transparent"

android:cacheColorHint="#00000000"

android:dividerHeight="0dp"

android:fadingEdge="none"

android:scrollingCache="false"

android:scrollbars="none"

android:visibility="gone"

android:layout_height="fill_parent"/ >

....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: