Android ScrollView与ListView一起(嵌套)使用解决ListView自动滚动的几点方案

来源:互联网 发布:二叉树的遍历设计算法 编辑:程序博客网 时间:2024/05/17 07:51

 说明:很多ScrollView与ListView一起使用过的人都应该知道,到ScrollView嵌套ListView时ListView会自动加滚动,大概只能显示两个Item的高度,很是让人头疼。但是Android貌似并不提倡这两者一起使用,详情请看Android开发文档。

 接下来说一下解决方案:

1、最简单的一种:指定ListView的高度,即android:layout_height='480dp'给ListView的layout_height一个确定的值。这种方法如果只有少量数据还是可行的,但是当有大量数据时就不那么美观了。

2、有一位仁兄重写了ListView,地址:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=46824&extra=page=1&page=1

3、这里还有一个重写的方案:http://www.cnblogs.com/LuoYer/archive/2011/05/07/2039884.html

4、第四种可以完美解决这个问题,就是动态为ListView设置高度,其实原理与第一种的想法一样,就是让ListView“放弃”自己滚动。

先说一下实现思路:动态计算ListView每个Item的高度,然后根据所有的Item的高度设置ListView的总高度。

以下是计算ListView高度的方法。

代码:

public void setListViewHeightBasedOnChildren(ListView listView){
       ListAdapter listAdapter = listView.getAdapter();
       if (listAdapter == null) {
           return;
       }

       int totalHeight = 0;
       for (int i = 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));
       params.height += 5;//if without this statement,the listview will bea little short
       listView.setLayoutParams(params);
    }

 

布局文件:

<?xml version="1.0"encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:orientation="vertical"
   android:background="#44444444">
<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
   <LinearLayout
           android:id="@+id/ll1"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
           android:scrollbars="vertical"
           android:orientation="vertical"
           android:paddingLeft="15dp"
           android:paddingRight="15dp"
           android:paddingTop="30dp"
           android:paddingBottom="30dp"
           android:background="#ff888888">
           <TextView
                   android:text="あ"
                   android:textColor="#ffeeeeee"
                   android:textSize="18sp"
                   android:layout_width="fill_parent"
                   android:layout_height="wrap_content"></TextView>
           <ListView
                   android:scrollbars="none"
                   android:stackFromBottom="true"
                   android:id="@+id/lv0"
                   android:layout_width="fill_parent"
                   android:layout_height="20dp"></ListView>
                   </LinearLayout>
</ScrollView>
</LinearLayout>

 

0 0
原创粉丝点击