android view嵌套,android关于view嵌套问题

一、listview嵌套listview,recycleview嵌套recycleview

出现问题:子view无法滑动,列表展示不完全

原因及解决方案:在控件绘制出来之前要对ListView的大小进行计算,要解决将子ListView全部显示出来的问题,就是重新计算一下其大小告知系统即可

方法1、但是这个方法设置的item的Layout必须是带有onMeasure()方法的控件,否则在计算的时候会报错

/**

* 设置Listview的高度

*/

public void setListViewHeight(ListView listView) {

ListAdapter listAdapter = listView.getAdapter();

if(listAdapter ==null) {

return;

}

int totalHeight =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));

listView.setLayoutParams(params);

}

方法2、自己继承ListView,重写ListView的onMeasure()方法,来自己计算ListView的高度,然后再xml中直接使用这个自定义的ListView

public class MyListView extends ListView {

public MyListView (Context context, AttributeSet attrs) {

super(context, attrs);

}

public MyListView (Context context) {

super(context);}

public MyListView (Context context, AttributeSet attrs,intdefStyle) {

super(context, attrs, defStyle);

}

@Override

public void onMeasure(int widthMeasureSpec,int heightMeasureSpec) {

int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >>2,MeasureSpec.AT_MOST);

super.onMeasure(widthMeasureSpec, expandSpec);

}

}

方法3、不做全部显示,但是让其可以滑动看到其余数据

继承ListView,重写interceptTouchEvent使其返回false来取消父ListView对触摸事件的拦截,将触摸事件分发到子View来处理。然后在使用的时候,将其作为父ListView使用,就可以使子ListView可以滑动了

具体自定义父ListView代码:

public class ParentListView extends ListView {

public ParentListView(Context context) {

super(context);

// TODO Auto-generated constructor stub

}

public ParentListView(Context context, AttributeSet attrs,intdefStyle) {

super(context, attrs, defStyle);

// TODO Auto-generated constructor stub

}

public ParentListView(Context context, AttributeSet attrs) {

super(context, attrs);

// TODO Auto-generated constructor stub

}

//将 onInterceptTouchEvent的返回值设置为false,取消其对触摸事件的处理,将事件分发给子view

@Override

public boolean onInterceptTouchEvent(MotionEvent ev) {

// TODO Auto-generated method stub

return false;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值