作者:流浪的牛仔2011Ting_883 | 来源:互联网 | 2023-09-05 12:09
我做的那个页面是Android的图文混排,效果如下:我把ScrollView将最外层的LinearLayout包裹之后页面就运行不出来了,而且ListView的数据只能显示一行。。。。查
我做的那个页面是Android的图文混排,效果如下:
我把ScrollView将最外层的LinearLayout包裹之后页面就运行不出来了,而且ListView的数据只能显示一行。。。。
查资料说,ScrollView和ListView不能同时使用。该怎么做才能实现我这个页面的上下滑动呢?
新手,刚开始Android开发,求大虾们帮忙~
16 个解决方案
另外,我中间的文字是用的两个listView显示的,虽然显示功能实现了,但总感觉怪怪的。。
这个本身页面的逻辑就有问题,从我观察,lz的listview那块的内容应该是固定的吧,或者至少是制式的。制式的用listview意义本来就不是很大,弄成多行的textview即可。这样不就解决了lz的问题。
其实就是scrollview的嵌套问题,你在一开始的时候获取listview单个item的高度然后计算出listview的高度,在代码动态设置下就可以了
上面是解决listview只展示一行的问题,至于scrollview不能滑动你可以试着自定个listview,把onInterceptTouchEvent的返回值改为false
最简单就是linearLayoyt 使用addView(view),反正不涉及大量数据。通过遍历获取数据,填充到自定义view再add就可以了
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
通过onMeasure计算呢?
自定义LISTview 里面加
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int ex = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 4,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, ex);
}
Activity代码里面
public void setListView(ListView lv) {
// 获取ListView对应的Adapter
ListAdapter listAdapter = lv.getAdapter();
if (listAdapter == null) {
return;
}
int Height = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
// listAdapter.getCount()返回数据项的数目
View listItem = listAdapter.getView(i, null, lv);
// 计算子项View 的宽高
listItem.measure(0, 0);
// 统计所有子项的总高度
Height += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = lv.getLayoutParams();
params.height = Height
+ (lv.getDividerHeight() * (listAdapter.getCount() - 1));
// listView.getDividerHeight()获取子项间分隔符占用的高度
// params.height最后得到整个ListView完整显示需要的高度
lv.setLayoutParams(params);
}
添加这个方法固定listview的高度
推荐你个网址吧http://blog.csdn.net/qq_21709449/article/details/41210485,你可以看下,有详细的解决方案