• 完美解决ListView 与 ScrollView 共存问题


    1:首先设置ListView的高度,在setAdapter之后调用此方法。

    public static void setListViewHeightBasedOnChildren(ListView listView) {
            ListAdapter listAdapter = listView.getAdapter();
            if (listAdapter == null) {
                   return;
            }
            
            int totalHeight = 0;
            int len = listAdapter.getCount();
            for (int i = 0; i < len; i++) {   
                   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.setLayoutParams(params);
        }

    2:如果ListView中的数据是单行的以上代码没有问题,如果Item行数不固定则要重写ListView的onMeasure方法重新计算每个Item的高度。

    public class WListView  extends ListView{
    
        public WListView(Context context) {
            super(context);
            // TODO Auto-generated constructor stub
        }
    
        public WListView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            // TODO Auto-generated constructor stub
        }
    
        public WListView(Context context, AttributeSet attrs) {
            super(context, attrs);
            // TODO Auto-generated constructor stub
        }
        
        public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            //根据模式计算每个child的高度和宽度
            int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                    MeasureSpec.AT_MOST);
            super.onMeasure(widthMeasureSpec, expandSpec);
        }
    }

    这样就解决了。

    在使用的时候通过多态的方式进行。例如:

    (1) activity_xxsd.xml

    <com.wzh.view.WListView
    android:background="@drawable/xxsd_content_bg"
    android:id="@+id/lvXxsdZxtzTitles"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

    (2) XxsdActivity.java

    private ListView lvXxsdZxtzTitles = null;

    ...

    lvXxsdZxtzTitles=(WListView)findViewById(R.id.lvXxsdZxtzTitles);

  • 相关阅读:
    HTML当中特殊字符的表示
    溢出文本用“...”代替
    【转】图标字体化浅谈
    字体在网页中画ICON图标
    图片轮播
    js获取网页屏幕可视区域高度
    MVC入口程序 | 简单调用及实例化
    初学者对于MVC架构模式学习与理解
    PHP初学习笔记(2015/4/8)
    linux常用20命令 --转载
  • 原文地址:https://www.cnblogs.com/yshyee/p/3462637.html
Copyright © 2020-2023  润新知