ScrollView嵌套ListView只显示一行
在开发的过程当中,由于手机屏幕的大小的限制,我们经常需要使用滑动的方式,来显示更多的内容。在最近的工作中,遇见一个需求,需要将ListView嵌套到ScrollView中显示。于是乎有了如下布局:
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="#FFE1FF"
- android:orientation="vertical" >
- <ScrollView
- android:layout_width="match_parent"
- android:layout_height="match_parent" >
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent" >
- <ListView
- android:id="@+id/listView1"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:fadingEdge="vertical"
- android:fadingEdgeLength="5dp" />
- </LinearLayout>
- </ScrollView>
- </LinearLayout>
运行程序,如下结果,无论你如何调整layout_width,layout_height属性,ListView列表只显示一列!
在查阅的各种文档和资料后,发现在ScrollView中嵌套ListView空间,无法正确的计算ListView的大小,故可以通过代码,根据当前的ListView的列表项计算列表的尺寸。实现代码如下:
- public class MainActivity extends Activity {
- private ListView listView;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- listView = (ListView) findViewById(R.id.listView1);
- String[] adapterData = new String[] { "Afghanistan", "Albania",… … "Bosnia"};
- listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,adapterData));
- setListViewHeightBasedOnChildren(listView);
- }
- public void setListViewHeightBasedOnChildren(ListView listView) {
- // 获取ListView对应的Adapter
- ListAdapter listAdapter = listView.getAdapter();
- if (listAdapter == null) {
- return;
- }
- int totalHeight = 0;
- for (int i = 0, len = listAdapter.getCount(); i < len; i++) {
- // listAdapter.getCount()返回数据项的数目
- View listItem = listAdapter.getView(i, null, listView);
- // 计算子项View 的宽高
- listItem.measure(0, 0);
- // 统计所有子项的总高度
- totalHeight += listItem.getMeasuredHeight();
- }
- ViewGroup.LayoutParams params = listView.getLayoutParams();
- params.height = totalHeight+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
- // listView.getDividerHeight()获取子项间分隔符占用的高度
- // params.height最后得到整个ListView完整显示需要的高度
- listView.setLayoutParams(params);
- }
- }
运行结果,OK问题搞定,打完收工!
转载于:https://www.cnblogs.com/jeffen/p/6739817.html
ScrollView嵌套ListView只显示一行相关推荐
- 日积月累:ScrollView嵌套ListView只显示一行
在开发的过程当中,由于手机屏幕的大小的限制,我们经常需要使用滑动的方式,来显示更多的内容.在最近的工作中,遇见一个需求,需要将ListView嵌套到ScrollView中显示.于是乎有了如下布局: [ ...
- ScrollView 嵌套 ListView 只显示第一行的源码分析
要带着问题来阅读源码,解惑以满足心中的好奇心,知其然并知其所以然,了解发现 Google 工程师的代码设计原理. 1.猜测是在 onMeasure 的时候,只测量了第一个 item. 在 Measur ...
- ScrollView 里面嵌套 listview 使得listview只显示一行问题解决
2019独角兽企业重金招聘Python工程师标准>>> 方法一,最直接的方法就是删除 ScrollView控件 方法二:写个工具类动态设置listview的高度 public cla ...
- Android在ListView中嵌套一个GridView时只显示一行的原因及解决方法
在之前的编程里,我还没有遇到过要在一个ListView中嵌套一个GridView或是在一个GridView中嵌套一个ListView.所以今天事儿来了!我花了一将近3个小时,找到了为什么我在一个Lis ...
- Android ScrollView嵌套GridView导致GridView只显示一行item
Android ScrollView嵌套GridView导致GridView只显示一行item Android ScrollView在嵌套GridView时候,会导致一个问题发生:GridView只显 ...
- android中ScrollView嵌套ListView或GridView显示位置问题
Android中ScrollView中嵌套ListView或GridView时在开始进入界面时总是显示中间位置,开头的位置显示不出来.这种情况下只需要在ScrollView的父控件中添加以下两行代码即 ...
- ScrollView嵌套ListView后,进入页面不从顶部开始显示的问题解决
ScrollView嵌套ListView后,进入页面不从顶部开始显示的问题解决 首先,正常情况下,如果在ScrollView里嵌套ListView后,会发现ListView只显示1条数据 那么,为了解 ...
- listview嵌套listview,子listview只显示一个item问题
背景: 我在做项目的时候准备用listview嵌套一个listview,但是发现,子listview只显示一条数据,于是,一猜又是计算高度出问题了. 处理办法,当然是和scrollview嵌套list ...
- 四种方案解决ScrollView嵌套ListView问题
在工作中,曾多次碰到ScrollView嵌套ListView的问题,网上的解决方法有很多种,但是杂而不全.我试过很多种方法,它们各有利弊. 在这里我将会从使用ScrollView嵌套ListView结 ...
最新文章
- php怎么批量转码,网站文件批量转码_PHP教程
- JS的Document属性和方法
- 焦点轮播图——myfocus焦点图库
- 教你如何用阿里canal
- (三)数字判断大小语句
- Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定)
- jQuery 源码解析一:jQuery 类库整体架构设计解析
- 实例源码--Android捕鱼达人经典游戏
- andorid月总结
- java递归用for实现_用java实现的经典递归算法
- 精通javascript学习笔记
- word里面如何插入图片
- [RK3288][Android6.0] Audio中的HW Params设置流程
- 快速清除系统中的木马病毒
- 典型的FPGA芯片有哪些,看完这篇文章就知道了
- Mac——快速锁定屏幕
- nexus学习 五、搭建阿里云代理
- 计算机课设微程序最大值,计算机组成原理课程设计(微程序)报告
- Android开发使用SurfaceView和Mediaplayer播放网络视频(功能齐全)
- 杭州银行批量交易平台(HZBAT)技术内幕