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 ...
随机推荐
- Android多线程更新UI的方式
Android下,对于耗时的操作要放到子线程中,要不然会残生ANR,本次我们就来学习一下Android多线程更新UI的方式. 首先我们来认识一下anr: anr:application not rep ...
- PyTorch 60 分钟入门教程
PyTorch 60 分钟入门教程:PyTorch 深度学习官方入门中文教程 http://pytorchchina.com/2018/06/25/what-is-pytorch/ PyTorch 6 ...
- 借助ltp语义分析提取特征,之后,文本生成
"""地点-哪里有做-业务-的(正规|靠谱)-公司?地点-做-业务-的(正规|靠谱)-公司(有哪些?|的联系方式是什么?|哪家口碑好值得信赖?)地点-做-业务-(怎么能省 ...
- 实践001:char 类型字段在表中的长度
Rainy on 20170215 1.同事在 写RFC的时候遇到报错:"YTST_001" 必须为扁平结构.不能将内部表.字符# 原因是自建结构中字段定义为了string 类型. ...
- Lightoj 1012 - Guilty Prince
bfs遍历一遍就行了. /* *********************************************** Author :guanjun Created Time :2016/6/ ...
- android 代码优化:关闭输出日志
android关闭日志 我们在开发时,经常会输出各种日志来debug代码.但是等到应用发布的apk运行时不希望它输出日志. 关闭输出日志Log.v(),Log.i(),Log.w(),Log.v(), ...
- C++ 多线程与并发
1. 非原子操作 这些非原子操作在被编译为汇编代码后不止一条指令. 自加.自减少: new 关键字: 申请内存: 调用构造函数: pInst = new T; // 对于这样一个赋值语句,更是包含了如 ...
- I.MX6 查找占用UART进程
/**************************************************************************** * I.MX6 查找占用UART进程 * 说 ...
- 【Bitset】 BZOJ4810
难得学习一下C++的库..[至今连map,vector都没用过的我.. 首先#include<bitset>或<bits/stdc++.h> 定义函数: { bitset & ...
- sqlserver2008Mail
use msdb GO DROP PROC MailTim GO CREATE PROC MailTim @Subject NVARCHAR(100),@Body NVARCHAR( ...