第一次写博客,有错的地方大家可以指出;
大家都知道在ScrollView嵌套ListView,ListView会显示不完全,无法计算ListView的高度,要解决在一个滑动界面中显示ListView和其他布局,有两种方法;
第一种:就是让listView的高度全部展示出来,那么这个就要对ListView进行封装,重新设置高度;代码如下:
public class ListViewForScrollView extends ListView { public ListViewForScrollView(Context context) { super(context); } public ListViewForScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public ListViewForScrollView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } /** * 重写onMeasure(),达到使ListView适应ScrollView的效果 */ @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); }} 其中两个输入参数: widthMeasureSpec 水平宽度 heightMeasureSpec 垂直高度 这两个要求是按照View.MeasureSpec类来进行编码的。 参见View.MeasureSpec这个类的说明:这个类包装了从parent传递下来的布局要求,传递给这个child。 每一个MeasureSpec代表了对宽度或者高度的一个要求。 每一个MeasureSpec有一个尺寸(size)和一个模式(mode)构成。 MeasureSpec.AT_MOST 表示子布局可以根据自己的大小选择任意大小的模式 Integer.MAX_VALUE >> 2 表示值为 2的31次方-1 的常量,它表示 int 类型能够表示的最大值。 第二种方法:想要实现滑动界面中包含ListView,可以通过给ListView添加HeaderView或者FooterView来实现,代码如下:
mView = View.inflate(mContext, R.layout.fragment_base_slide_view_contact, this);
mistView = (ListView)mView.findViewById(R.id.lv_card);
headerView = View.inflate(mContext, R.layout.top, null);footerView = View.inflate(mContext, R.layout.foot, null);
mTextNotExc = (TextView)headerView.findViewById(R.id.tv_exchange);friendTips = (ImageView)headerView.findViewById(R.id.iv_tips);allNumber = (TextView)footerView.findViewById(R.id.tv_number);llNumber = (LinearLayout)footerView.findViewById(R.id.ll_number);
mListView.addHeaderView(headerView, null, false);mListView.addFooterView(footerView, null, false); 在ListView中添加上头和尾布局,一样可以实现上述效果,而且这种方法比第一种的更好,它不用一次性把所有的数据全部加载出来,可以和平常的listView差不多使用,支持分页加载;
时间: 2024-12-28 16:46:47