一种列表视图中的网格显示方法和装置与流程

文档序号:12122922阅读:354来源:国知局
一种列表视图中的网格显示方法和装置与流程

本发明涉及一种列表视图中的网格显示方法和装置。



背景技术:

在安卓应用开发中,有不少应用都会有在列表中展示网格布局这种情况,目前常用的方案是直接通过ListView控件中嵌套GridView控件来实现,把GridView控件当作ListView控件中的一行item,通过ListView控件的adapter的getview方法获得。但是,这样实现会出现以下几个问题:由于ListView和GridView都是由Abslistview类派生而来,Abslistview类族的各个类之间直接嵌套会造成嵌套内部的类显示不全,所以需要重写GridView控件中的onMeasure方法,Gridview的高度测量模式换成AT_MOST,这样设置导致Gridview的item的复用机制失效,对整个列表视图的刷新造成影响。另外,在ListView控件中嵌套GridView控件后,需要给GridView控件设置adapter方法,所以在列表视图滑动时,每次都需要创建一次adapter,而在滑动时创建对象会对整个UI的刷新造成较大的性能影响,影响帧率,给用户造成卡顿的感觉。



技术实现要素:

有鉴于此,本发明的目的在于提供一种列表视图中的网格显示方法和装置,以力图解决或者至少缓解上面存在的问题。

第一方面,本发明提供一种列表视图中的网格显示方法,该方法包括:

接收用户设置的列表视图中当前条目需要显示对象的显示数目;

根据所述显示数目调整所述当前条目对应的网格布局控件,使所述网格布局控件的用于生成网格的网格子控件的数目与所述显示数目相等;

根据所述网格布局控件在所述列表视图中生成网格,使每一个网格对应一个所述显示对象;

在所述网格中显示对应的所述显示对象。

可选地,在根据本发明的方法中,在所述根据所述显示数目调整所述当前条目对应的网格布局控件之前,包括:

检测列表视图中是否存在网格布局控件;

如果所述列表视图中未检测到网格布局控件,则创建网格布局控件。

可选地,在根据本发明的方法中,所述根据所述显示数目调整所述当前条目对应的网格布局控件,使所述网格布局控件的用于生成网格的网格子控件的数目与所述显示数目相等,包括:

遍历所述网格布局控件的所有的网格子控件,如果网格子控件的数目大于所述显示数目,则隐藏多余的所述网格子控件;

如果网格子控件的数目小于所述显示数目,则增加所述网格子控件,直到所述网格子控件的数目与所述显示数目相等。

可选地,在根据本发明的方法中,所述网格布局控件的属性信息包括网格列数、网格间距。

可选地,在根据本发明的方法中,所述根据所述网格布局控件在所述列表视图中生成网格,包括:

根据所述显示数目和所述网格布局控件的属性信息中的的网格列数和网格间距,在列表视图中生成网格。

第二方面,本发明提供一种列表视图中的网格显示装置,该装置包括:

接收单元,用于接收用户设置的列表视图中当前条目需要显示对象的显示数目;

网格调整单元,用于根据所述显示数目调整所述当前条目对应的网格布局控件,使所述网格布局控件的用于生成网格的网格子控件的数目与所述显示数目相等;

网格生成单元,用于根据所述网格布局控件在所述列表视图中生成网格,使每一个网格对应一个所述显示对象;

网格显示单元,用于在所述网格中显示对应的所述显示对象。

可选地,在根据本发明的装置中,所述网格调整单元还用于:

检测列表视图中是否存在网格布局控件;

如果所述列表视图中未检测到网格布局控件,则创建网格布局控件。

可选地,在根据本发明的装置中,所述网格调整单元还用于:

遍历所述网格布局控件的所有的网格子控件,如果网格子控件的数目大于所述显示数目,则隐藏多余的所述网格子控件;

如果网格子控件的数目小于所述显示数目,则增加所述网格子控件,直到所述网格子控件的数目与所述显示数目相等。

可选地,在根据本发明的装置中,所述网格布局控件的属性信息包括网格列数、网格间距。

可选地,在根据本发明的装置中,所述网格生成单元还用于:

根据所述显示数目和所述网格布局控件的属性信息中的网格列数和网格间距,在列表视图中生成网格。

根据本发明的技术方案,在列表视图中采用网格布局控件实现显示对象的网格显示,占用内存更少,在滑动列表时列表的刷新的速度有明显的优势,提高用户体验。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1示出了本发明的列表视图中的网格显示装置的示例计算设备100的框图。

图2示出了本发明实施例所提供的一种列表视图中的网格显示方法的流程图。

图3示出了本发明实施例所提供的一种列表视图中的网格显示界面的图示。

图4示出了本发明实施例所提供的一种列表视图中的网格显示装置的结构图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明的列表视图中的网格显示装置驻留在计算设备中,图1布置为实现根据本发明的列表视图中的网格显示装置的示例计算设备100的框图。在基本的配置102中,计算设备100典型地包括系统存储器106和一个或者多个处理器104。存储器总线108可以用于在处理器104和系统存储器106之间的通信。

取决于期望的配置,处理器104可以是任何类型的处理,包括但不限于:微处理器((μP)、微控制器(μC)、数字信息处理器(DSP)或者它们的任何组合。处理器104可以包括诸如一级高速缓存110和二级高速缓存112之类的一个或者多个级别的高速缓存、处理器核心114和寄存器116。示例的处理器核心114可以包括运算逻辑单元(ALU)、浮点数单元(FPU)、数字信号处理核心(DSP核心)或者它们的任何组合。示例的存储器控制器118可以与处理器104一起使用,或者在一些实现中,存储器控制器118可以是处理器104的一个内部部分。

取决于期望的配置,系统存储器106可以是任意类型的存储器,包括但不限于:易失性存储器(诸如RAM)、非易失性存储器(诸如ROM、闪存等)或者它们的任何组合。系统存储器106可以包括操作系统120、一个或者多个应用122以及程序数据124。在一些实施方式中,应用122可以布置为在操作系统上利用程序数据124进行操作。

计算设备100还可以包括有助于从各种接口设备(例如,输出设备142、外设接口144和通信设备146)到基本配置102经由总线/接口控制器130的通信的接口总线140。示例的输出设备142包括图形处理单元148和音频处理单元150。它们可以被配置为有助于经由一个或者多个A/V端口152与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口144可以包括串行接口控制器154和并行接口控制器156,它们可以被配置为有助于经由一个或者多个I/O端口158和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备146可以包括网络控制器160,其可以被布置为便于经由一个或者多个通信端口164与一个或者多个其他计算设备162通过网络通信链路的通信。

网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(RF)、微波、红外(IR)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。

计算设备100可以实现为小尺寸便携(或者移动)电子设备的一部分,这些电子设备可以是诸如蜂窝电话、个人数字助理(PDA)、个人媒体播放器设备、无线网络浏览设备、个人头戴设备、应用专用设备、或者可以包括上面任何功能的混合设备。计算设备100还可以实现为包括桌面计算机和笔记本计算机配置的个人计算机。

图2示出了根据本发明实施例所提供的一种列表视图中的网格显示方法的流程图。如图2所示,在计算设备中执行,该方法始于步骤S210。

在步骤S210中,接收用户设置的列表视图中当前条目需要显示对象的显示数目。

列表视图(ListView)是安卓操作系统提供的一种应用或控件,可以上下滑动,在列表视图控件中可以包含多个子布局,每个子布局占据一行,每个子布局称为其一条条目(item)。列表视图控件可以通过adapter接口的getView方法获取列表视图中当前条目的显示对象,如,文字、图片等等。用户可以在如服务器上设置列表视图中当前条目需要显示对象的显示数目,列表视图控件从如服务器获取上述显示数目。其中,显示数目根据实际情况进行设置,例如,需要显示20个显示对象。在一个实施例中,item中需要显示20个显示对象,ListView控件会调用20次adapter接口中的getView方法来获得显示对象。

在步骤S220中,根据显示数目调整当前条目对应的网格布局控件,使网格布局控件的用于生成网格的网格子控件的数目与显示数目相等。

网格布局控件(GridLayout)是使用虚细线将布局划分为行、列和单元格,安卓操作系统通过自身提供的布局加载工具LayoutInflater对其进行加载。网格布局控件的布局属性信息中可以存储网格间距、网格列数和网格行数等等,不过应当理解,上述网格布局控件的属性不限于此。例如,在实际应用中,可以将orienttation属性设置成横向,以便通过addview添加子控件时,按照从左往右的顺序,高度根据实际应用进行设置。

在根据显示数目调整当前条目对应的网格布局控件之前,检测列表视图中是否存在网格布局控件。如果列表视图中未检测到网格布局控件,则创建网格布局控件,如,根据ListView控件中getView方法中的参数convertView的值判断是否存在网格布局控件。GirdLayout控件是通过ListView控件调用adapter的getView方法获得,在通过getView方法获取网格布局控件时,需要对getView方法进行重写。getView方法中有个参数是convertView,这个参数是表示当前item的复用。ListView控件首次调用getView方法时,ListView控件中并没有GirdLayout控件,所以参数convertView的值为null。因此,可以根据convertView值来判断GirdLayout是否创建。

根据一种实施方式,遍历网格布局控件的所有的网格子控件,如果网格子控件的数目大于所述显示数目,则隐藏多余的网格子控件。如果网格子控件的数目小于显示数目,则增加网格子控件,直到网格子控件的数目与显示数目相等。

ListView控件通过convertView中的findviewbyid函数找到当前条目的GridLayout控件,调用GridLayout控件中的getChildCount方法获得网格子控件的数目。选择显示数目和上述网格子控件的数目中较大的数目,对网格布局控件中的所有网格子控件进行遍历。将网格子控件的数目与如当前条目显示对象的显示数目进行比对。如果网格子控件的数目大于显示数目,将多余的网格隐藏,如,GridLayout控件需要调用setVisibility方法,将参数设成GONE这个值。如果网格子控件的数目小于显示数目,GridLayout控件调用LayoutInflater的infater方法将当前需要显示的网格子控件加载进来,再通过GridLayout控件的addview方法将上述网格子控件添加到GridLayout中,直到网格子控件的数目与显示数目相同为止。其中,每次遍历网格子控件时,调用GridLayout控件中的getChildAT方法判断当前条目中是否存在网格子控件,如果上述条目中的当前位置不存在网格子控件,需要调用如LayoutInflater方法创建网格子控件。

在步骤S230中,根据网格布局控件在列表视图中生成网格,使每一个网格对应一个显示对象。

根据一种实施方式,根据显示数目和网格布局控件的属性信息中的的网格列数和网格间距,在列表视图中生成网格。

通过计算设备如手机中运行的操作系统提供的getDisplayMetrics方法来获得触摸屏的宽度,根据上述触摸屏的宽度、ListView控件中设置的页边距大小以及网格布局控件的属性信息,计算每个网格所需要的实际区域,如,触摸屏宽度为pw,页边距为p,网格间距s,网格列数为n,网格宽度w为触摸屏宽度减去所有的页边距和网格间距并除以网格列数得到,公式为w=(pw-2p-(n-1)s)/n。调用网格布局控件的getLayoutParams函数获得布局参数LayoutParams,通过LayoutParams来设置网格的宽和高,直接对LayoutParams的LayoutParams.width和LayoutParams.height赋值即可。显示数目比较多时,ListView控件中的条目(item)存在复用情况,因此,在每次获得当前条目的网格后,需要重新刷新其视图,即网格中需要显示的目标对象。

在步骤S240中,在所述网格中显示对应的显示对象,具体可参考图3。

根据本发明的技术方案,在列表视图控件中采用网格布局控件实现显示对象的网格显示,占用内存更少,在滑动列表时列表的刷新的速度有明显的优势,提高用户体验。

图4示出了根据本发明提供的实施例的一种列表视图中的网格显示装置的示意图。如图4所示,该装置驻留在计算设备中,包括:接收单元410、网格调整单元420、网格生成单元430和网格显示单元440。

接收单元410接收用户设置的列表视图中当前条目需要显示对象的显示数目。

网格调整单元420根据所述显示数目调整所述当前条目对应的网格布局控件,使所述网格布局控件的用于生成网格的网格子控件的数目与所述显示数目相等。网格调整单元420在调整当前条目对应的网格布局控件时,检测列表视图中是否存在网格布局控件。如果所述列表视图中未检测到网格布局控件,则创建网格布局控件。随后,网格调整单元420遍历所述网格布局控件的所有的网格子控件,如果当前网格子控件的数目大于所述显示数目,则隐藏多余的所述网格子控件。如果当前网格子控件的数目小于所述显示数目,则增加所述网格子控件,直到所述网格子控件的数目与所述显示数目相等。具体的过程可参考上文中的方法描述,此处不做过多叙述。

网格生成单元430根据所述网格布局控件在所述列表视图中生成网格,使每一个网格对应一个所述显示对象。网格布局控件的属性信息包括网格列数、网格间距。网格生成单元430根据显示数目和所述网格布局控件的属性信息中的网格列数和网格间距,在列表视图中生成网格

网格显示单元440在上述网格中显示对应的显示对象。

本发明实施例所提供的一种列表视图中的网格显示装置可以为设备上的特定硬件或者安装于设备上的软件或固件等。本发明实施例所提供的装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,前述描述的系统、装置和单元的具体工作过程,均可以参考上述方法实施例中的对应过程,在此不再赘述。

在本发明所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明提供的实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释,此外,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。

最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围。都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1