首先,我们通过两个实例来了解下本篇文章所讲的重点,看下图:

微博:

陌陌:

大家应该对这两款软件并不陌生,接下来,我将列举下本文将要实现的几个点:

1.ListView嵌套GridView,互不冲突,界面显示及操作正常;

2.GridView中的图片依据屏幕大小,自动扩大或缩小以适应屏幕,并始终保持正方形;

3.图片数量不同时,布局不同(如上图的4张图片和6张图片);

4.点击ListView的item和点击Gridview的item互不冲突;

5.在GridView区域外的任何一点点击都可以触发ListView的item;

大家也可以针对上面的几点思考下应该如何实现。。。

。。。

好,思考完毕,接下来讲一下我的实现思路:

1.ListView嵌套GridView互不冲突的话就要重写GridView了,这个想必大家都知道,类似ScrollView嵌套ListView,不再多讲;

2.如何让GridView的图片适应屏幕并始终保持正方形呢,这个问题其实我在上几篇博客就已经讲过了,就是根据:屏幕的宽度-GridView以外的部分的宽度-n个图片间距的宽度,最后/GridView每行item的数量;GridView如何适配不同屏幕,当然,所用的都是像素值,因此需要将在xml中的dp转换为px后再进行计算;

3.针对第三点,我们可以根据图片的数量,动态的设置GridView的numColumns;

4.当我们实现的过程中,可能会遇到点击图片可以,但是点击ListView的item时无效,这时我们可以在ListView的item的最外层添加:

  1. android:descendantFocusability="blocksDescendants"

属性即可;

5.第五点,我们可以先体验下微博或者陌陌,只要点击图片外任何区域,均能触发LIstView的item,但我们在实现的过程中却会遇到这种问题,即便我们把GridView的宽度设置为wrap_content,却依然充满了布局,导致右半部分全是GridView的布局,也就无法实现这种效果。因此,我们仍需要根据图片数量,动态的设置GridView的宽度。

接下来,我们来看下本篇所实现的效果:

1.

2.

3.

4.

5.

项目结构:

项目源码:http://download.csdn.net/detail/baiyuliang2013/8354615

补充:如果想缩小图片,可以扩大GridView离右边框的间距即可,在item_listview.xml布局中,如下:

  1. <RelativeLayout
  2. android:id="@+id/rl4"
  3. android:layout_width="fill_parent"
  4. android:layout_height="wrap_content"
  5. android:layout_below="@+id/rl3"
  6. android:paddingRight="25dp"
  7. android:visibility="gone" >
  8.  
  9. <com.byl.listviewwithgrid.view.MyGridView
  10. android:id="@+id/gv_images"
  11. android:layout_width="wrap_content"
  12. android:layout_height="wrap_content"
  13. android:horizontalSpacing="2dp"
  14. android:listSelector="@null"
  15. android:numColumns="3"
  16. android:stretchMode="columnWidth"
  17. android:verticalSpacing="2dp" >
  18. </com.byl.listviewwithgrid.view.MyGridView>
  19. </RelativeLayout>

扩大

  1. android:paddingRight="25dp"

当然,此后再进行计算时,就要用你自己设置的dp转px后计算了...

ListView嵌套GridView的更多相关文章

  1. android listView嵌套gridview的使用心得

    在开发的过程中可能需要用到listview嵌套gridview的场景,但是在Android中, 不能在一个拥有Scrollbar的组件中嵌入另一个拥有Scrollbar的组件,因为这不科学,会混淆滑动 ...

  2. ScrollView嵌套ListView嵌套GridView的上下拉以及加载更多

    ScrollView 效果 ScrollView 说明 一个ScrollView 嵌套ListView 嵌套GridView的上拉加载更多,下拉刷新的demo. 主要是重写了GridView和Lsit ...

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

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

  4. ListView嵌套GridView使用详解及注意事项

    ListView嵌套GridView即ListView的每个Item中都包含一个GridView:需要注意的是由于ListView和GridView都是可滑动的控件. 所以需要自定义GridView, ...

  5. Flutter中用ListView嵌套GridView报错异常

    flutter中的ListView组件和GridView组件都是常用的布局组件,有时候ListView中需要嵌套GridView来使用,例如下图: 这种情况就需要在ListView里面再嵌套一个Gri ...

  6. 【Android】listview 嵌套gridview报错,代码:”during second layout pass: posting in next frame

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985, QQ986945193 公众号:程序员小冰 说明:本人曾经在listview嵌套gridview出现 ...

  7. Android中ListView嵌套GridView的简单消息流UI(解决宽高问题)

    最近搞一个项目,需要用到类似于新浪微博的消息流,即每一项有文字.有九宫格图片,因此这就涉及到ListView或者ScrollView嵌套GridView的问题.其中GridView的高度问题在网上都很 ...

  8. ListView嵌套GridView显示不完整的解决方案

    转载注明出处:http://blog.csdn.net/allen315410/article/details/40152987 近期在做项目中,有个模块须要在ListView中嵌套一个GridVie ...

  9. listview嵌套gridview,并实现grid元素部分显示以及点击展开与折叠

    原文链接:http://blog.csdn.net/duguju/article/details/49538341 有时我们需要用GridView显示目录列表,有时甚至是二级的,即listview每一 ...

随机推荐

  1. 机器学习基石:09 Linear Regression

    线性回归假设: 代价函数------均方误差: 最小化样本内代价函数: 只有满秩方阵才有逆矩阵. 线性回归算法流程: 线性回归算法是隐式迭代的. 线性回归算法泛化可能的保证: 根据矩阵的迹的性质:tr ...

  2. 将python代码打印成pdf

    将python代码打印成pdf,打印出来很丑,完全不能看. mac下:pycharm 编辑器有print的功能,但是会提示: Error: No print service found. 所以需要一个 ...

  3. UVA11795 Mega Man's Mission

    状压dp #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> ...

  4. APIO 2016

    我好菜啊都不会 T1.boats 题目大意:给你N段区间,按顺序决定每段区间可以选一个数或不选,若选则选的这个数必须大于所有在这之前选的数,求有多少种方案.(N<=500,区间在[1,1e9]范 ...

  5. bzoj 2004: [Hnoi2010]Bus 公交线路

    Description 小Z所在的城市有N个公交车站,排列在一条长(N-1)km的直线上,从左到右依次编号为1到N,相邻公交车站间的距 离均为1km. 作为公交车线路的规划者,小Z调查了市民的需求,决 ...

  6. [BZOJ]1042 硬币购物(HAOI2008)

    失踪OJ回归. 小C通过这道题mark一下容斥一类的问题. Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买s ...

  7. 二叉树的基本操作(含Huffman树)

    大二时候写的烂代码,翻出来复习复习(o(╯□╰)o). 代码: #include <stdio.h> #include <stdlib.h> #define Max_Size ...

  8. linux下磁盘分区详解 图文(fdisk;mkfs)

    linux分区不同于windows,linux下硬盘设备名为(IDE硬盘为hdx(x为从a-d)因为IDE硬盘最多四个,SCSI,SATA,USB硬盘为sdx(x为a-z)),硬盘主分区最多为4个,不 ...

  9. windows server 2003 远程桌面最大连接数调整与windows 2008远程桌面后,本地帐号自动锁定

    调整windows server 2003 最大远程连接数的步骤如下: 第1步.开始-->控制面板-->添加或删除程序-->添加/删除windows组件-->选择"终 ...

  10. Spring MVC运行流程

    一.配置阶段 ①web.xml ②DispatcherServlet    //Spring MVC总入口 ③配置初始化参数   //classpath:application.xml,用于配置无数个 ...