Android中listview嵌套scrollveiw冲突的解决方法
更新时间:2017年01月25日 10:57:30 作者:堕落8
这篇文章主要为大家详细介绍了Android中listview嵌套scrollveiw冲突的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
一.使用网上用的动态改变listview高度的方法
该方法只适用于item布局是LinearLayout布局的情况,不能是其他的,因为其他的Layout(如RelativeLayout)没有重写onMeasure(),所以会在onMeasure()时抛出异常。所以使用限制较大。
public class Utility { public static void setListViewHeightBasedOnChildren(ListView listView) { //获取ListView对应的Adapter ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { // pre-condition return; } int totalHeight = 0; for (int i = 0, len = listAdapter.getCount(); i < len; i++) { //listAdapter.getCount()返回数据项的数目 View listItem = listAdapter.getView(i, null, listView); listItem.measure(0, 0); //计算子项View 的宽高 totalHeight += listItem.getMeasuredHeight(); //统计所有子项的总高度 } ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); //listView.getDividerHeight()获取子项间分隔符占用的高度 //params.height最后得到整个ListView完整显示需要的高度 listView.setLayoutParams(params); } }
二.网上有帖子说在ScrollView中添加一属性 android:fillViewport="true" ,这样就可以让ListView全屏显示了。在我机器上测试失败了。
三.重写ListView、gridView(推荐)
重写ListView:
public class MyListView extends ListView { public MyListView(Context context) { // TODO Auto-generated method stub super(context); } public MyListView(Context context, AttributeSet attrs) { // TODO Auto-generated method stub super(context, attrs); } public MyListView(Context context, AttributeSet attrs, int defStyle) { // TODO Auto-generated method stub super(context, attrs, defStyle); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // TODO Auto-generated method stub int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } }
重写GridView:
/** *自定义gridview,解决ScrollView中嵌套gridview显示不正常的问题(1行) */ public class MyGridView extends GridView{ public MyGridView(Context context, AttributeSet attrs) { super(context, attrs); } public MyGridView(Context context) { super(context); } public MyGridView(Context context, AttributeSet attrs, int defStyle) { 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); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- Android中实现淘宝购物车RecyclerView或LIstView的嵌套选择的逻辑
- ScrollView嵌套ListView滑动冲突的解决方法
- Android ListView的item中嵌套ScrollView的解决办法
- 关于Android中ListView嵌套GridView的问题
- Android listview多视图嵌套多视图
- Android之ScrollView嵌套ListView和GridView冲突的解决方法
- ListView嵌套GridView使用详解及注意事项
- 探讨:如何在ScrollView中嵌套ListView
- Android笔记之:在ScrollView中嵌套ListView的方法
- Android滑动冲突的完美解决
相关文章
Android原生TabLayout使用的超全解析(看这篇就够了)
现在很多app都有顶部可左右切换的导航栏,并且还带动画效果,要实现这种导航栏,可以使用Android原生的Tablayout也可以借助第三方框架实现,这篇文章主要给大家介绍了关于Android原生TabLayout使用的相关资料,需要的朋友可以参考下2022-09-09Android 开发使用Activity实现加载等待界面功能示例
这篇文章主要介绍了Android 开发使用Activity实现加载等待界面功能,结合实例形式详细分析了Android基于Activity实现加载等待界面布局与功能操作技巧,需要的朋友可以参考下2020-05-05
最新评论