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

微博:

陌陌:

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

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的最外层添加:

 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布局中,如下:

        <RelativeLayout
            android:id="@+id/rl4"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/rl3"
            android:paddingRight="25dp"
            android:visibility="gone" >

            <com.byl.listviewwithgrid.view.MyGridView
                android:id="@+id/gv_images"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:horizontalSpacing="2dp"
                android:listSelector="@null"
                android:numColumns="3"
                android:stretchMode="columnWidth"
                android:verticalSpacing="2dp" >
            </com.byl.listviewwithgrid.view.MyGridView>
        </RelativeLayout>

扩大

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. php array_multisort函数实现按某一字段对二维数组进行排序

    在工作中碰到一个页面如表格似的展示多条数据,要求根据其中的修改时间对数据进行排序, 数据格式类似于 $a = array( 0=>array( editTime=>'' addTime=& ...

  2. [ZJOI2007]Hide 捉迷藏

    Description 捉迷藏 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩 捉迷藏游戏.他们的家很大且构造很奇特,由N个屋子和N-1条 ...

  3. 3064: Tyvj 1518 CPU监控

    注意这题要维护历史最大加和历史最大覆盖 /************************************************************** Problem: 3064 Us ...

  4. ●杜教筛入门(BZOJ 3944 Sum)

    入门杜教筛啦. http://blog.csdn.net/skywalkert/article/details/50500009(好文!) 可以在$O(N^{\frac{2}{3}})或O(N^{\f ...

  5. hdu 5113(2014北京—搜索+剪枝)

    题意:有N*M的棋盘,用K种颜色去染,要求相邻块不能同色.已知每种颜色要染的块数,问能不能染,如果能,输出任一种染法. 最开始dfs失败了- -,优先搜索一行,搜完后进入下一列,超时.本来以为搜索不行 ...

  6. hdu5666 BestCoder Round #80

    Segment  Accepts: 418  Submissions: 2020  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 6553 ...

  7. HDU 1540 Tunnel Warfare(最长连续区间 基础)

    校赛,还有什么途径可以申请加入ACM校队?  Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/ ...

  8. JVM学习记录-对象已死吗

    前言 先来回顾一下,在jvm运行时数据区,分为两部分,一个部分是线程共享区,主要包括堆和方法区,另一部是线程私有区分包括本地方法栈,虚拟机栈和程序计数器.在线程私有部分的三个区域是随着线程生和灭的.栈 ...

  9. 使设备I/O的核心模块工作,有哪两种方式?

    设备处理进程方式.文件操作方式.

  10. MySQL插件实现浅析——插件的调用

    一. MySQL中的动态插件 最初想到这个问题是在学习mysql半同步复制相关问题的时候,为何在mysql运行时install半同步插件并开启后就能起到作用,他是如何让事务停下来等待的.安装插件的时候 ...