ScrollView嵌套GridView,GridView显示不全
最近开发有个需求是以A-Z的方式区分全国城市(搜索功能),并实现字母索引的功能(有点类似微信,不过比较坑的是用的是GridView,
并且GridView上面还有几个LinearLayout)。
详细说下需求:界面的最上面有个TextView,显示“自动定位到的城市”,接着下面是当前点位到的城市;再下面是TextView(”热门城市“),
再下是GridView显示的热门城市(不按字母分模块),再下面是TextView(”所有城市“),最后就是GridView嵌套GridView显示所有城市(以A-Z分模块)。
(其实用ListView嵌套GridView是一样的)
不看文字的看图吧:

另外说下,bar下面就是一个ScrollView。热门城市这些都比较好实现,当GridView显示所有城市的时候,就显示不全了(印象中是只显示到T,XYZ等显示不出来)。
按照网上的方法各种重写GridView和ScrollView,显然还是没有效果。重写的代码如下:
@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的item布局高度计算不正确,然后又是各种获取item,各种计算,结果还是不行。
没办法,上面催得紧。只能用古老的方法(勿喷)。
用LinearLayout替换第二个GridView,然后LinearLayout里面嵌套GridView,首先把获取到的所有城市按A-Z分开(非A-Z的算#,这个后面再说),通过
gridView.setAdapter和linearLayout.addView方式,终于实现了如图的效果。Item的点击事件在GridViewAdapter中添加,通过自定义接口回调点击事件。
这里说一下字母索引的功能:右边的字母控件是自定义(网上一大推)TextView,滑动或点击后有一个回调函数,将当前点击或滑动到的值回调,然后通过一个
TextView放大展示(不懂看微信)。在linearLayout.addView的时候,我把一个linearLayout的item(也就是gridView)对应的position存放到一个HashMap,
也就是key=字母,value=position。当滑动或点击时,拿到的回调参数从HashMap把position取出来,再通过linearLayout.getChildAt(position).getY()获取
到该item的Y坐标,最后通过srollView.scrollTo(0, (int)y),完美实现字母索引。
此外,汉字转拼音的功能,使用的是pinyin4j-2.5.0.jar开源库(转换的数据有一些是不准确(例如“长沙” “changsha”,被转换成“zhangsha”)),不过针对特殊的
数据可以特殊处理了。
差不多就这样子了,先去研究下重写GridView和ScrollView,依然还是显示不全的问题吧.
ScrollView嵌套GridView,GridView显示不全的更多相关文章
- RecyclerView嵌套ScrollView导致RecyclerView内容显示不全
我们在使用RecyclerView嵌套至ScrollView内的时候 RecyclerView不在屏幕内的数据会不显示出来,这里是一个坑,我们需要重写RecyclerView /** * Create ...
- ScrollView嵌套ListView只显示一行之计算的高度不正确的解决办法(转)
ScrollView嵌套ListView只显示一行之计算的高度不正确的解决办法 分类: android应用开发2013-12-19 09:40 1045人阅读 评论(3) 收藏 举报 AndroidS ...
- 一键解决ScrollView嵌套ListView仅仅显示一行的问题
/** * 解决ScrollView嵌套ListView仅仅显示一行的问题 * * @param listView */ private void setListViewHeightBasedOnCh ...
- ScrollView嵌套ListView,GridView数据加载不全问题的解决
我们大家都知道ListView,GridView加载数据项,如果数据项过多时,就会显示滚动条.ScrollView组件里面只能包含一个组件,当ScrollView里面嵌套listView,GridVi ...
- ListView嵌套GridView,显示不全解决办法
ListView嵌套GridView时,遇到了GridView只显示一行,其余都显示不出来的问题,最终解决办法如下: 需要自定义GridView,重新绘制高度即可: public class MyGr ...
- 解决Scrollview 嵌套recyclerview不能显示,高度不正常的问题
我们先看一个效果,问题说的就是中间的Grid效果在Scrollview 嵌套recyclerview显示问题,在Android Api 24是好的,不过在5,1,1版本(api 22)缺出现了问题 最 ...
- ExpandableListView使用(三)-ScrollView嵌套ExpandableListView,列表显示不全
前言 ScrollView嵌套ExpandableListView会出现ExpandableListView列表显示不全,目前比较好的方法是复写ExpandableListView,重写里面的onMe ...
- 解决ScrollView嵌套RecyclerView的显示及滑动问题
项目中时常需要实现在ScrollView中嵌入一个或多个RecyclerView.这一做法通常会导致如下几个问题 页面滑动卡顿 ScrollView高度显示不正常 RecyclerView内容 ...
- ScrollView嵌套ListView只显示一行
错误描述 ScrollView嵌套ListView中导致ListView高度计算不正确,只显示一行. 解决方法 重写ListView的onMeasure方法,代码如下. @Override publi ...
- 安卓开发ScrollView嵌套ListView只显示一行
在用列表控件做一个“更多功能”的界面的时候 <?xml version="1.0" encoding="utf-8"?> <ScrollVie ...
随机推荐
- 2016/2/26 <marquee></marquee>实现多种滚动效果
页面的自动滚动效果,可由javascript来实现,但是有一个html标签 - <marquee></marquee>可以实现多种滚动效果,无需js控制.使用marquee标记 ...
- oracle安装登录sqlplus / as sysdba然后报错ERROR: ORA-01031 insufficient privileges
解决办法: 一般情况下检查操作系统的登录用户是否包含在ORA_DBA组中. 控制面板->管理工具->计算机管理->系统工具->本地用户和组->ORA_DBA组. 如果OR ...
- java jdbc/ojdbc 链接oracle的三种方式
方法一:使用service_name 连接oracle jdbc:oracle:thin:@//:/<service_name> 例如: jdbc:oracle:thin:@//10.1 ...
- ABAP 创建和调用WebService
1.创建WebService ① SE37创建RFC函数 ② SE80创建企业服务-service provider-existing ABAP object 或SE37-实用程序-创建Web服务 ③ ...
- js用法2
1,网站cookie document.cookie 2, Web Storage相当于cookie,当存储量大于cookie localStorage 存储格式都是字符串 有效期,清空缓存前,永远存 ...
- myeclipse 8.6安装SVN插件
方法二: 安装subclipse, SVN 插件 1.从官网下载site-1.6.9.zip文件,网址是:subclipse.tigris.org, 2.从中解压出features与plug ...
- HDU - 2586 How far away ?(离线Tarjan算法)
1.给定一棵树,每条边都有一定的权值,q次询问,每次询问某两点间的距离. 2.这样就可以用LCA来解,首先找到u, v 两点的lca,然后计算一下距离值就可以了. 这里的计算方法是,记下根结点到任意一 ...
- poj3046 Ant Counting——多重集组合数
题目:http://poj.org/problem?id=3046 就是多重集组合数(分组背包优化): 从式子角度考虑:(干脆看这篇博客) https://blog.csdn.net/viphong/ ...
- CodeForces 722A Broken Clock (水题)
题意:给定一个时间,然后改最少的数字,使得它成为12进制或者24进制. 析:24进制主要判是不是大于23,如果是把第一位变成0,12进制判是不是大于12,如果是再看第二位是不是0,是0,第一位变成1, ...
- PHP tripos()函数使用需要注意的问题
tripos() 函数返回字符串在另一个字符串中第一次出现的位置.这在PHP字符串匹配与替换的时候常用到,但是很多时候我们总感觉当查找的字符串在源字符串的开头的时候总会不好使. 原来stripos() ...