赞
踩
有这样一个需求:
1.显示一个界面,界面上有一个列表(ListView),列表上面有一个可以滚动的海报。
2.要求在ListView滚动的过程中,ListView上面的海报也可以跟着ListView滚动。
我们的一般解决方案:
1.使用ScrollView嵌套这一个ListView。
对,这样的布局本身是没哟什么问题的。但是问题来了,当你运行你的界面的时候,突然发现,你的列表中明明有好多项,但是为什么只显示一项呢?仔细检查你会发现,不是列表只显示一项,而是其它的项被布局本身遮住了。
怎么办呢?下面将给出两种相对简单的解决方案:
第一种:禁用ListView的滚动(Scroll)。
第二种:计算ListView中每一项的高度,然后根据每一项的高度“乘以”项数,计算出ListView的总高度。
下面给出第一种方法的代码展示:
import android.widget.ListView;
public class MyListView extends ListView{
public MyListView(android.content.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);
}
}
以下是第二种方法的的代码:
/**动态改变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();
// totalHeight += 80;
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
// params.height = 80 * (listAdapter.getCount() - 1);
// params.height = 80 * (listAdapter.getCount());
params.height = totalHeight
+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
((MarginLayoutParams) params).setMargins(0, 0, 0, 0);
listView.setLayoutParams(params);
}
第一种方法在相应的布局文件中使用时要注意:
<com.example.watchappdemo.MyListView
//使用相对应的包名来引用listview
android:id="@+id/list_zixun"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:scrollbars="none" >
</com.example.watchappdemo.MyListView>
ScrollView嵌套ListView会出现的ListView底部会自动出现在屏幕上
ScrollView嵌套了一个自定义的ListView后,ListView底部每次都会直接出现在屏幕上,把listview上面的内容会顶走,怎么解决了有两个方法,
一.在代码中让listview失去焦点,
二.在scrollview的上一层布局中加入一个属性android:descendantFocusability=”blocksDescendants”,完美解决
参考地址:http://www.cnblogs.com/tony-yang-flutter/p/3344636.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。