最近开发有个需求是以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. 【iOS系列】-触摸事件与手势识别

    [iOS系列]-触摸事件与手势识别 第一:触摸事件 一根手指触摸屏幕时,会创建一个与手指相关联的UITouch对象 UIEvent:称为事件对象,记录事件产生的时刻和类型 两根手指同时触摸一个view ...

  2. 电子设计省赛--PID

    //2014年4月17日 //2014年6月20日入"未完毕"(未完毕) //2014年6月21日 一開始还以为是多难的算法.事实上就是个渣渣. 当然PID实践中应该会非常难. 另 ...

  3. 2016/04/26 权限 数据库mydb2 五个表 分别是 1,用户 2,角色 3,权限 4,用户对应的角色 5,角色对应的权限

    权限:   1,后台分配角色     角色对应权限    2,各用户通过登录页面登录    查看到各自的权限 五个页面   加引入一个jquery-1.11.2.min.js 1,guanli.php ...

  4. java8--IO工具类(java疯狂讲义3复习笔记)

    Paths类 public static void pathTest(){ Path path = Paths.get("~"); System.out.println(path) ...

  5. How to use filters in a GridPanel

    You can just link statically required files in your index.html <link rel="stylesheet" t ...

  6. jquery中一些容易忽略的方法

    jquery.ajaxPrefilter:([dataTypes],handle(options,originalOptions,jqXHR)):在发送请求之前和执行$.ajax之前操作options ...

  7. caioj1230: [图论补充]哈密顿路径

    保存模版 #include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> ...

  8. 并不对劲的[USACO07NOV,洛谷p2886]Cow Relays

    题意就是给一张无向有边权的图.起点.终点,求起点到终点经过n条边的最短路.n<=10^6,点的编号<=10^3,边数<=10^2. 这个边数让人不由自主地想到了floyd,然后发现f ...

  9. Lightoj 1140(数位DP)

    求一个区间内的数含有多少个0. dp[len][pre]表示长度为len的数,含有pre个0. 需要加一个标记,来表示前缀是否为0(可以是一串连续的0),如果前缀一直为0,就一直搜,如果前缀不为0,就 ...

  10. c语言和c++栈的简单实现以及构造器的原理

    也就是训练将原来的c语言 用类表示出来.. 关于构造器: //1与类名相同 没有返回值 被系统生成对象时自动调用,用于初始化 //2 可以有参数 构造器重载 默认参数 //3 重载和默认不能同时存在, ...