在 Google 的 Android 开发文档,对于 ScrollView 有如下介绍

1.XML属性

android:fillViewport
这是 ScrollView 独有的属性,用来定义 ScrollView 对象是否需要拉伸自身内容来填充
viewport ,这个 viewport 应该是指布局文件中为ScrollView指定的区域。
这个属性也可以在代码中通过 setFillViewport(boolean) 方法指定

android:overScrollMode
这是继承于 View 的属性,也很常用。用于定义 over-scrolling behavior
也就是滑动到超出内容边缘的时候的行为。
这个属性很奇特,在 Android 官方文档的 View 的 XML 属性中找不到介绍
但既然能用,肯定在R.attrs文件中有定义,在 Android 平台的源码及资源文件中
一定能找到
随便找一个项目,在External Libraries 中找到 Android Platform 的源码及资源文件
也就是 android.jar 和 res 文件夹,在 res->values->attrs 文件中查找 overScrollMode
最终在
标签中找到
这证明它的确是 View 的属性


1.png

这说明官方文档也不是最完整准确的。或者也有其他原因,但是暂时不知道。

2.ScrollView 中嵌入 ListView 引发的错误
ScrollView 中只能包含一个子布局。如果这个子布局中恰好还有一个 ListVie 组件
那么这个 ListView 的绘制会出现问题 ---- 无论在 xml 布局中如何指定 ListView
的宽高,ListView 就只能显示一条数据,不显示其他数据
解决办法就是在代码中动态指定 ListView 的绘制参数 LayoutParams ,将每一个
item 的高度累加,计算出总的高度,赋值给 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) + 5);    // listView.getDividerHeight()获取子项间分隔符占用的高度    // params.height最后得到整个ListView完整显示需要的高度    listView.setLayoutParams(params);}

更多相关文章

  1. Android采用SharedPreferences保存用户登录信息
  2. 《第一行代码》阅读笔记(三十四)——Material Design
  3. Android(安卓)Template(模板) 编写(一)
  4. Android(安卓)Studio 上传SVN忽略文件
  5. Android实现搜索历史功能
  6. vlayout使用说明(二)
  7. Spinner的功能和用法
  8. Android自带的下载功能,不需要断点续传、大文件下载、通知栏显示
  9. Android实践 -- Apktool 的使用

随机推荐

  1. Android Studio 3.6.3 中遇到无法创建Fil
  2. android中真正destroy掉activity的方法
  3. android不能显示log的问题
  4. android拨打电话
  5. Android ADT 插件安装
  6. Android 格式化日期
  7. Android的信号格数显示优化
  8. Android监听消息通知栏点击事件
  9. 分享到某个地方
  10. 使用 Android 和 XML 构建动态用户界面