android中scrollview与listview共存

来源:互联网 发布:300英雄淘宝四周年 编辑:程序博客网 时间:2024/06/05 11:16

ScrollView与ListView共存会存在滚动的问题,并且ListView只显示一个半Item。 当ListView的高度设定一定的值时,ListView同样地会显示对应的高度的Item。 因此我们可以计算出这个ListView的总高度,再将它设置到ListView中,那么之前的滚动,高度问题也就不存在了。

1. [代码]获取并设置ListView高度的方法

[全屏查看所有代码]


     

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
publicvoid setListViewHeightBasedOnChildren(ListView listView) { 
    ListAdapter listAdapter = listView.getAdapter();  
    if(listAdapter == null) { 
        return
    
 
    inttotalHeight = 0
    for(inti = 0; i < listAdapter.getCount(); i++) { 
        View listItem = listAdapter.getView(i, null, listView); 
        listItem.measure(0,0); 
        totalHeight += listItem.getMeasuredHeight(); 
    
 
    ViewGroup.LayoutParams params = listView.getLayoutParams(); 
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); 
    ((MarginLayoutParams)params).setMargins(10,10,10,10);
    listView.setLayoutParams(params); 
}

2. [代码]XML布局     

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:fadingEdge = "none"
        android:background="#FFF4F4F4"
        xmlns:android="http://schemas.android.com/apk/res/android"
        >
   <LinearLayout
    android:gravity="center_horizontal"
    android:orientation="vertical"
    android:background="#fff4f4f4"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <ListView
        android:id="@+id/moreItemsListView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:cacheColorHint="#FFF4F4F4"
        android:dividerHeight="0.0dip"
        android:fadingEdge="none"
        />
   </LinearLayout>
</ScrollView>

3. [图片] scrollview_listview.jpg    

 

4. [代码]重写ListView解决item高度不一致的问题     

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
publicclass MyListView extendsListView {
 
    publicMyListView(Context context) {
        super(context);
    }
 
    publicMyListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
 
    publicMyListView(Context context, AttributeSet attrs,
            intdefStyle) {
        super(context, attrs, defStyle);
    }
 
    @Override
    protectedvoid onMeasure(intwidthMeasureSpec, intheightMeasureSpec) {
        intexpandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2
                MeasureSpec.AT_MOST); 
        super.onMeasure(widthMeasureSpec, expandSpec); 
    }
 
}
0 0
原创粉丝点击