Android ScrollView 和ListView 一起使用的问题汇总
1.ScrollView 嵌套 ListView ,touch事件的截获问题。
参考 http://www.cnblogs.com/lqminn/archive/2013/03/02/2940194.html
http://blog.csdn.net/chaihuasong/article/details/17499799
_scrollView.requestDisallowInterceptTouchEvent(true);
这句话的意思是告诉scrollView,滚动的事件交给我处理。用完以后记得还回去
_scrollView.requestDisallowInterceptTouchEvent(false);
如果不设置回去,ScrollView将无法滚动了。
2.ScrollView 滚动时,ListView的第一个条目是否处于显示状态?
参考 http://stackoverflow.com/questions/4628800/android-how-to-check-if-a-view-inside-of-scrollview-is-visible
boolean checkNeedRefresh() {
Rect scrollBounds = new Rect();
View firstChild = listView.getChildAt(0);
_scrollView.getHitRect(scrollBounds);
if (firstChild.getLocalVisibleRect(scrollBounds)) {
// Any portion of the firstChild, even a single pixel, is within the
// visible window
return true;
} else {
// NONE of the firstChild is within the visible window
return false;
}
}
3. listView不能显示完整
参考 http://blog.csdn.net/hahashui123/article/details/39177057
http://blog.csdn.net/solomonxiang/article/details/26507145
public static void setListViewHeight(ListView listView) {
try {
int totalHeight = 0;
ListAdapter adapter = listView.getAdapter();
for (int i = 0, len = adapter.getCount(); i < len; i++) { // listAdapter.getCount()
View listItem = adapter.getView(i, null, listView);
listItem.setLayoutParams(new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight
+ (listView.getDividerHeight() * (listView.getCount() - 1));
listView.setLayoutParams(params);
} catch (Exception ex) {
ex.printStackTrace();
}
}
顺带GridView
public static void setGridViewHeight(GridView gridView, int numColumns) {
try {
ListAdapter adapter = gridView.getAdapter();
int row = 3;
View listItem = adapter.getView(0, null, gridView);
if (listItem == null)
return;
listItem.setLayoutParams(new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
listItem.measure(0, 0);
int totalHeight = listItem.getMeasuredHeight() * row
+ (gridView.getVerticalSpacing() * (row - 1));
ViewGroup.LayoutParams params = gridView.getLayoutParams();
params.height = totalHeight;
gridView.setLayoutParams(params);
} catch (Exception ex) {
ex.printStackTrace();
}
}
如果ListView 带有BottomView
public static void setListViewHeight(ListView listView) {
try {
int totalHeight = 0;
int bottomHeight = 0;
ListAdapter dataAdapter = null;
int totalItems = 0;
ListAdapter adapter = listView.getAdapter();
if (adapter instanceof HeaderViewListAdapter) {
HeaderViewListAdapter headerViewListAdapter = ((HeaderViewListAdapter) adapter);
dataAdapter = headerViewListAdapter.getWrappedAdapter();
totalItems = dataAdapter.getCount();
int allItems = headerViewListAdapter.getCount();
View bottomItem = headerViewListAdapter.getView(allItems - 1,
null, listView);
bottomItem.measure(0, 0);
bottomHeight = bottomItem.getMeasuredHeight();
} else {
dataAdapter = adapter;
}
for (int i = 0, len = totalItems; i < len; i++) {
View listItem = dataAdapter.getView(i, null, listView);
listItem.setLayoutParams(new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
int listviewCount = listView.getCount();
int height = totalHeight
+ (listView.getDividerHeight() * listviewCount + 1)
+ bottomHeight;
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = height;
listView.setLayoutParams(params);
listView.requestLayout();
} catch (Exception ex) {
ex.printStackTrace();
}
}
4. 其他,自定义控件实现ListView
http://www.cnblogs.com/lesliefang/p/3587154.html
5. 发现 每次加载完成后,listview总是滚到 屏幕最上方,实际上listview上面还有东西被盖住了,解决办法如下
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="wrap_content" > <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:descendantFocusability="blocksDescendants"
android:orientation="vertical" >
最关键的一句, 找到srcollview的 内容控件,一般是 LinearLayout,加上属性 android:descendantFocusability="blocksDescendants"
就可以了。
Android ScrollView 和ListView 一起使用的问题汇总的更多相关文章
- Android ScrollView与ListView的冲突解决办法汇总
1. public void setListViewHeight(){ ListAdapter listadapter = lv.getAdapter(); if (listadapter == n ...
- Android ScrollView 嵌套 ListView、 ListView 嵌套ScrollView Scroll事件冲突解决办法
本人菜鸟一名,最近工作了,开始学习Android. 最近在做项目的时候,UX给了个design,大概就是下拉刷新的ListView中嵌套了ScrollView,而且还要在ScrollView中添加动画 ...
- android scrollview嵌套listview计算高度的问题
ScrollView中只能放一个控件,一般都放LinearLayout,orientation属性值为vertical.在LinearLayout中放需要呈现的内容.ListView也在其中,List ...
- Android ScrollView和ListView联用,且ListView可以下拉刷新和上拉加载
ScrollView嵌套listView且ListView可以实现上拉加载. 由于代码太长,在此只提供实现思路: 先不说上拉加载的事,咱们先回想一下,ScrollView和LsitView联用,时的解 ...
- Android ScrollView 嵌套ListView的替代方案
概要:本例仅提供替代思路. 原需求:实现下图这个布局 要求:头部菜单固定,实现Viewpager.中间的按钮菜单,底部的listview一起能够上下滚动. 做法: 把Viewpager.中间的按钮菜单 ...
- android:ScrollView嵌套ListView的问题
在ScrollView中嵌套使用ListView,看起来ListView只会显示一行多一点,不能滑动.ListView的高度怎么改都有问题,与预期不符合.搜索了一些解决方案,我觉得最好不要用这样的设计 ...
- Android scrollview嵌套listview运行后最先显示出来的位置不在顶部而是中间问题
scrollview里面嵌套了一个listview ,通过设置一个方法设置了listview的高度 现在的情况就是进到这个界面的时候看到的不是最上面 而是中间 ,该问题的解决办法为: mScrollV ...
- Android ScrollView和ListView滑动冲突解决记录
private int mLastX; private int mLastY; public View.OnTouchListener onTouchListener = new View.OnTou ...
- android 有弹性的ScrollView 简单实现,与处理ScrollView和ListView,GridView之间的冲突
处理ScrollView和ListView,GridView之间的冲突, 最好的办法就是继承这两个类,重写他们的onMeasure方法即可: ListView: import android.widg ...
随机推荐
- sam9260 adc 头文件
/* * driver/char/at91_adc.h * * Copyright (C) 2007 Embedall Technology Co., Ltd. * * Analog-to-digit ...
- windows 7 下安装 vagrant + Oracle VM VirtualBox
一.安装下准备 1.下载Oracle VM VirtualBox https://www.virtualbox.org/wiki/Downloads (VirtualBox-4.3.22-98236 ...
- Ext 组件的一些操作
原文:http://linder0209.iteye.com/blog/1039200 1.Ext.Component 该组件在渲染的时候会默认的创建div DOM,是根据this.autoEl的配置 ...
- SSM Spring +SpringMVC+Mybatis 整合配置 及pom.xml
SSM Spring +SpringMVC+Mybatis 配置 及pom.xml SSM框架(spring+springMVC+Mybatis) pom.xml文件 maven下的ssm整合配置步骤
- 我对Web开发的认识
前端 使用mvvm框架,每个视图维护自己的数据模型,更专注于视图模型及状态,在框架的帮助下规范视图与后端的交互及减轻工作量 我的选择是avalon.js 解耦前后端开发 自有资源独立管理,向后端开放资 ...
- Reordering the columns in a data frame
Problem You want to do reorder the columns in a data frame. Solution # A sample data frame data < ...
- Qt 菜鸟的坑 QAbstractSocket::isValid()
我曾经多次在 Qt socket 编程中使用 tcpSocket.isValid 来判断我当前的连接是否可用,最近写程序时才发现此法并不妥当. bool QAbstractSocket::isVali ...
- Dijkstra 算法,用于对有权图进行搜索,找出图中两点的最短距离
Dijkstra 算法,用于对有权图进行搜索,找出图中两点的最短距离,既不是DFS搜索,也不是BFS搜索. 把Dijkstra 算法应用于无权图,或者所有边的权都相等的图,Dijkstra 算法等同于 ...
- vnc server on Ubuntu
Virtual Network Computing(VNC)是进行远程桌面控制的一个软件.客户端的键盘输入和鼠标操作通过网络传输到远程服务器,控制服务器的操作 (只有背景,没有菜单栏问题没有解决) ...
- 【转】【WPF】WPF MVVM 简单实例
1 新建WPF 应用程序WPFMVVMExample 程序结构如下图所示. 2 Model实现 在Model文件夹下新建业务类StudentModel(类文件StudentModel.cs),类的详细 ...