关于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"/ >
....
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"/ >
....
相关文章推荐
- android 圆形的ImageView
- Android Service学习之AIDL, Parcelable和远程服务
- android中getSystemService详解
- Android中assets目录和res/raw目录的异同区别和使用场景
- Android本地视频播放器开发--简易播放器原型
- android支持多种屏幕
- android支持多种屏幕
- 从零开始搭建Android手机系统开发环境
- android RadioButton文字居中的方法
- Android 4.4 模拟器支持art模式
- 正在运行的android程序,按home键之后退回到桌面,在次点击程序图标避免再次重新启动程序解决办法
- Android的环境搭建
- android ListView实现圆角(两种解决方案)
- android List,HashMap,Iterator
- Android开发环境搭建
- android , listview 中 嵌套button ,button事件覆盖item事件解决办法
- 播放android应用工作中的视频文件
- Sim卡的EF文件有何作用?
- Android开发之onCreate可以乱写吗
- Android Activity 四种启动模式 总结