android下activity中多个listview只允许主界面滚动

之前发现了自己的APP在处理两个listview时产生的一个bug。当两个listview中的item数量多出手机屏幕时,listview不能显示完全。

【方法一】
一开始觉得只要加一个scrollview就可以了,但是后来发现想法是错误的,因为listview本身也是一个scrollview,那么scrollview嵌套scrollview的问题就很麻烦了,到底把滚动权交给谁,结果是哪个listview都不能滚动,后来谷歌了一大圈,终于发现了两个帖子,给我启发:
1 stackoverflow
http://stackoverflow.com/questions/3495890/how-can-i-put-a-listview-into-a-scrollview-without-it-collapsing
2 csdn
http://blog.csdn.net/huangbiao86/article/details/7978149
主要的解决方法,就是禁用listview的滚动条,从而只有一个scrollview的滚动条。那么怎么禁用?或者限定listview的android:layout_height。
网上提供的方法就是在刷新listview之前,计算list item的总的高度,从而设置android:layout_height,那么就可以做到固定高度了。

/***   * 动态设置listview的高度   *    * @param 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));        listView.setLayoutParams(params);    }    

虽然这么做了,但是我最后还是发现高度不对,为什么呢?我调试发现,无论item里面的textview不管有几行,item的getMeasreHeight始终是固定值。那么怪不得了,textview的高度无法计算的话,那么高度也还是确定不了。无奈,我只能选择折中,设置textview的属性:

android:singleline="true"android:eclipse="end"android::layout_width ="wrap_content"

那么设置textview行为固定啦,这样就可以保证高度计算的准确。
至此,bug解完

【方法二】
复写一个listView ,在你布局文件中使用此view,

 <ScrollView    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:layout_marginTop="@dimen/size_30_dp"    android:fadingEdge="none" >    <LinearLayout        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:gravity="center_horizontal"        android:orientation="vertical" >        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="left"            android:layout_marginLeft="@dimen/size_12_dp"            android:text="@string/text_task_personal"            android:textColor="@color/text_task_personal_color"            android:textSize="@dimen/size_16" />        <com.xxx.view.MyListView            android:id="@+id/gtask_listview_doing"            style="@style/inventory_view_list_style"            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:layout_marginTop="@dimen/detail_top"            android:background="@color/white" />        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="left"            android:layout_marginLeft="@dimen/size_12_dp"            android:text="@string/text_task_team"            android:textColor="@color/text_task_team_color"            android:textSize="@dimen/size_16" />        <com.xxx.view.MyListView            android:id="@+id/gtask_listview_finished"            style="@style/inventory_view_list_style"            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:layout_marginBottom="@dimen/detail_top"            android:background="@color/white" />    </LinearLayout></ScrollView>

MyListView相关代码:

package com.xxx.view;import android.content.Context;import android.widget.ListView;public class MyListView extends ListView {public MyListView(Context context) {    super(context);}public MyListView(Context context, android.util.AttributeSet attrs) {    super(context, attrs);}public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {   int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>> 2, MeasureSpec.AT_MOST);    super.onMeasure(widthMeasureSpec, expandSpec);}

参考网址:
1、http://www.android100.net/html/201406/04/18807.html
2、http://www.oschina.net/question/1032943_137573

更多相关文章

  1. 【Android】给Android(安卓)Studio设置代理
  2. 两个Activity之间跳转问题之activity的四种加载模式
  3. android进度条修改教程(颜色,高度)
  4. 关于pdfbox在android平台中运行出错的原因分析
  5. Android开发实践:布局的平分
  6. Android(安卓)RecyclerView滚动定位
  7. 【android原生应用】之闹钟应用搭起篇
  8. A​n​d​r​o​i​d​ ​B​l​u​e​t​o​o​t​h​详​解(And
  9. Android输入法遮盖输入框(屏幕底部输入框不能往上弹)

随机推荐

  1. Android中Message参数传递
  2. Android(安卓)解决方法数 65536 (65k) 限
  3. DPCM.txt
  4. android cts and junit
  5. android 疑难杂症 综合
  6. Android——实现在纯Java代码里写布局
  7. android WebView 读取sdcard 上 html 报
  8. Android 后台线程调用前台线程的几种方法
  9. Android Studio - Session 'app': Error
  10. android修改进入工程模式