最近开发有个需求是以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显示不全的更多相关文章

  1. RecyclerView嵌套ScrollView导致RecyclerView内容显示不全

    我们在使用RecyclerView嵌套至ScrollView内的时候 RecyclerView不在屏幕内的数据会不显示出来,这里是一个坑,我们需要重写RecyclerView /** * Create ...

  2. ScrollView嵌套ListView只显示一行之计算的高度不正确的解决办法(转)

    ScrollView嵌套ListView只显示一行之计算的高度不正确的解决办法 分类: android应用开发2013-12-19 09:40 1045人阅读 评论(3) 收藏 举报 AndroidS ...

  3. 一键解决ScrollView嵌套ListView仅仅显示一行的问题

    /** * 解决ScrollView嵌套ListView仅仅显示一行的问题 * * @param listView */ private void setListViewHeightBasedOnCh ...

  4. ScrollView嵌套ListView,GridView数据加载不全问题的解决

    我们大家都知道ListView,GridView加载数据项,如果数据项过多时,就会显示滚动条.ScrollView组件里面只能包含一个组件,当ScrollView里面嵌套listView,GridVi ...

  5. ListView嵌套GridView,显示不全解决办法

    ListView嵌套GridView时,遇到了GridView只显示一行,其余都显示不出来的问题,最终解决办法如下: 需要自定义GridView,重新绘制高度即可: public class MyGr ...

  6. 解决Scrollview 嵌套recyclerview不能显示,高度不正常的问题

    我们先看一个效果,问题说的就是中间的Grid效果在Scrollview 嵌套recyclerview显示问题,在Android Api 24是好的,不过在5,1,1版本(api 22)缺出现了问题 最 ...

  7. ExpandableListView使用(三)-ScrollView嵌套ExpandableListView,列表显示不全

    前言 ScrollView嵌套ExpandableListView会出现ExpandableListView列表显示不全,目前比较好的方法是复写ExpandableListView,重写里面的onMe ...

  8. 解决ScrollView嵌套RecyclerView的显示及滑动问题

        项目中时常需要实现在ScrollView中嵌入一个或多个RecyclerView.这一做法通常会导致如下几个问题 页面滑动卡顿 ScrollView高度显示不正常 RecyclerView内容 ...

  9. ScrollView嵌套ListView只显示一行

    错误描述 ScrollView嵌套ListView中导致ListView高度计算不正确,只显示一行. 解决方法 重写ListView的onMeasure方法,代码如下. @Override publi ...

  10. 安卓开发ScrollView嵌套ListView只显示一行

    在用列表控件做一个“更多功能”的界面的时候 <?xml version="1.0" encoding="utf-8"?> <ScrollVie ...

随机推荐

  1. 通过GhostDoc实现自定义方法概要(summary)

    首先是下载GhostDoc 来自园友:http://www.cnblogs.com/VAllen/p/GhostDocPro49.html 修改模板 安装好后,修改下模板,工具>GhostDoc ...

  2. Android 怎样在java/native层改动一个文件的权限(mode)与用户(owner)?

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载.但请保留文章原始出处:          CSDN:http://www.csdn.net        ...

  3. 连接sql2008时报错

    最近把公司的项目搭建到本地(周末回家要加班),可是连接后,发现程序后台出错,错误信息:不支持此服务器版本.目标服务器必须是 SQL Server 2000 或更高版本. 本地是SqlServer200 ...

  4. vue入门教程 (vueJS2.X)

    vue入门教程vueJS2.X 写在前面 看完此教程可以达到:能看懂并能修改简单的vue项目. 看的过程中,请把所有例子都放到html文件中跑一遍. Vue.js 是什么 Vue.js(读音 /vju ...

  5. JAVASCRIPT 和 AJax 实现局部验证

    JSP页面 <td width="10%" class="main_matter_td">真实姓名</td> <td width= ...

  6. CollectionView缩放水平卡片布局

    实现效果 实现思路 从Demo效果图中,可以看出来,主要是缩放系数的计算.对于不同距离的cell,其缩放系数要变化,以便整体协调显示. 所以,我们必须重写-layoutAttributesForEle ...

  7. 并不对劲的bzoj1861: [Zjoi2006]Book 书架

    传送门-> 这题的正确做法是splay维护这摞书. 但是并不对劲的人选择了暴力(皮这一下很开心). #include<algorithm> #include<cmath> ...

  8. U-Boot编译过程完全分析

    2.1       U-Boot Makefile分析 2.1.1             U-Boot编译命令 对于mini2440开发板,编译U-Boot需要执行如下的命令: $  make  m ...

  9. gerrit使用总结

    1. 前言 最近在摸索git + gerrit代码审核的工作模式,需要安装gerrit服务器,经过一阵折腾,走了不少弯路,在此做下笔记,以便自己或者他人参考.有误的地方请指教. 我的环境如下: 环境 ...

  10. NetBeans IDE For PHP 简体中文版 8.1安装配置

    一.NetBeans IDE For PHP简介 NetBeans IDE 是一个开发环境 - 供程序员编写.编译.调试和部署程序的一个工具. 它是用 Java 编写的 - 但却可以支持任何编程语言. ...