listview嵌入scrolview冲突解决方法

来源:互联网 发布:sql带参数的存储过程 编辑:程序博客网 时间:2024/06/06 16:25


方法一 手动设置listview的高度

在listview.setAdapter或者adapter.notifyDataSetChanged()之后,可以让不能完全显示的listview正确的显示在其父控件ScrollView中。需要注意的是,对于listview中的每个item的填充布局,布局的根必须是LinearLayout控件;否则,listview就不能通过onMeasure()正确的计算到每个item的高度并显示出来,并会抛出异常!


         /** * 动态测量listview-Item的高度 * @param listView */public static void setListViewHeightBasedOnChildren(ListView listView) {          ListAdapter listAdapter = listView.getAdapter();           if (listAdapter == null) {              // pre-condition              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);      } 


方法二 重写listview的onMeasure方法


/** * 设置不滚动 */  public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)  {    int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,     MeasureSpec.AT_MOST);     super.onMeasure(widthMeasureSpec, expandSpec);  }









0 0
原创粉丝点击