System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术属于用户交互,具体涉及一种动态修改滚动布局每行中子组件的起始位置及子组件间距的方法。
技术介绍
1、当向安卓系统的recyclerview中一行添加n个子组件时,需要使用网格布局管理器gridlayoutmanager对recyclerview进行管理,这种情况下recyclerview会自动将这一行的空间平均划分成n个区域,每个区域将该子组件居左显示,形成一个recyclerview的布局子项,蓝色区域视觉上为空白区域,默认这些布局子项依次按序排列,这就是recyclerview的默认布局。
2、但是在实际设计过程中,设计人员可能会因为各种各样的原因,设计出非默认样式的布局,这种布局中每一行每个子布局的间距视觉上仍然一致,但是已经无法通过简单的平均分确定每个子组件的位置;针对这种情况,一般有以下解决办法:
3、1、在recyclerview的adapter中依据每一个子组件的位置,单独设置其坐标;但这种方法耗时费力,当一行放置数量过多时,需要为每一个子组件单独设置位置,且该位置需要另外计算。
4、2、在recyclerview布局本身上下工夫,通过修改recyclerview布局的位置和宽度,在视觉上让子组件和设计图中的位置相符;但这个修改后的位置和宽度需要开发自行计算,还会为之后维护留下隐患。
技术实现思路
1、针对现有技术中存在的上述缺陷,本专利技术提供了一种动态修改滚动布局每行中子组件的起始位置及子组件间距的方法,该方法通过使用
2、本专利技术通过如下技术方案实现:
3、第一方面,本专利技术实施例提供了一种动态修改滚动布局每行中子组件的起始位置及子组件间距的方法,具体包括如下步骤:
4、步骤一:初始化网格布局管理器,依据设计图设置每行数量spancount和纵向布局方向,并将网格布局管理器赋予recyclerview;
5、步骤二:初始化自定义循环布局装饰器,并将参数输入自定义循环布局装饰器;
6、步骤三:将自定义循环布局装饰器myitemdecoration赋予recyclerview;
7、步骤四:android的recyclerview执行渲染流程,在渲染每个子组件时,通过自定义循环布局装饰器中的getitemoffsets()方法,获取参数outrect,取得被修改后的outrect.left的值,确定每个子组件相较于默认位置的向左偏移量,并基于矫正后的新位置进行绘制设计图。
8、进一步地,步骤二中,所述参数包括:recyclerview的布局宽度recyclerlayoutwidth、设计图中的每行数量spancount、设计图中首个子组件距离左边界的距离x、设计图中子组件间距y及设计图中子组件宽度itemwidth。
9、进一步地,步骤四中,通过自定义循环布局装饰器修改outrect.left的值,具体包括如下步骤:
10、s41、创建自定义循环布局装饰器;
11、s42、获取当前列表布局的设计信息;
12、s43、写方法计算对应位置item的偏移量;
13、写方法private int getoutrectleft( view view, recyclerview parent);该方法返回子组件偏移量;
14、s44、修改每个子组件的偏移量。
15、进一步地,步骤s41具体包括:
16、自定义一个类myitemdecoration作为自定义循环布局装饰器,并让其继承自recyclerview.itemdecoration。
17、进一步地,步骤s42具体包括:
18、myitemdecoration创建成员变量x, y, recyclerlayoutwidth, spancount,itemwidth, 并重载构造方法,通过构造方法的参数传入设计信息,并赋值给对应的成员变量。
19、进一步地,步骤s43具体包括:
20、首先,确定默认位置的坐标,若设计图中子组件起始位置和默认值为一致,仅改变间距,则组件相较于默认位置的偏移量leftoffset = (recyclerlayoutwidth /spancount - itemwidth - y) * (position /getspancount), 其中,除positon外的参数均在步骤s42中myitemdecoration初始化时作为构造方法的参数被赋值给对应的成员变量,则直接被取得,参数position参数position通过recyclerview类的对象parent的getchildadapterposition(view)方法取得;若设计图中子组件起始位置和默认位置不一致时,则通过整行子组件右移响应距离减去起始位置x得到,即leftoffset =(recyclerlayoutwidth / spancount - itemwidth - y) * (position / getspancount)– x;方法返回该leftoffset的值。
21、进一步地,步骤s44具体包括:
22、重复步骤s43,重写myitemdecoration的getitemoffsets()方法,在每个子组件进行描绘时调用,进而获取到步骤s43中的getoutrectleft()方法所需的输入参数view和parent;且getitemoffsets()方法中还能获取到参数outrect,outrect.left参数默认是0,通过步骤s43的方法计算返回leftoffset,重新给outrect.left赋值为0 - leftoffset。
23、第二方面,本专利技术实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如本专利技术实施例中任一所述的一种动态修改滚动布局每行中子组件的起始位置及子组件间距的方法。
24、第三方面,本专利技术实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本专利技术实施例中任一所述的一种动态修改滚动布局每行中子组件的起始位置及子组件间距的方法。
25、与现有技术相比,本专利技术的优点如下:
26、本专利技术的一种动态修改滚动布局每行中子组件的起始位置及子组件间距的方法,无需特殊计本文档来自技高网...
【技术保护点】
1.一种动态修改滚动布局每行中子组件的起始位置及子组件间距的方法,其特征在于,具体包括如下步骤:
2.如权利要求1所述的一种动态修改滚动布局每行中子组件的起始位置及子组件间距的方法,其特征在于,步骤二中,所述参数包括:RecyclerView的布局宽度recyclerLayoutWidth、设计图中的每行数量spanCount、设计图中首个子组件距离左边界的距离x、设计图中子组件间距y及设计图中子组件宽度itemWidth。
3.如权利要求1所述的一种动态修改滚动布局每行中子组件的起始位置及子组件间距的方法,其特征在于,步骤四中,通过自定义循环布局装饰器修改outRect.left的值,具体包括如下步骤:
4.如权利要求3所述的一种动态修改滚动布局每行中子组件的起始位置及子组件间距的方法,其特征在于,步骤S41具体包括:
5.如权利要求3所述的一种动态修改滚动布局每行中子组件的起始位置及子组件间距的方法,其特征在于,步骤S42具体包括:
6.如权利要求3所述的一种动态修改滚动布局每行中子组件的起始位置及子组件间距的方法,
7.如权利要求3所述的一种动态修改滚动布局每行中子组件的起始位置及子组件间距的方法,其特征在于,步骤S44具体包括:
8.一种计算机设备,其特征在于,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如权利要求1-7任一项所述的一种动态修改滚动布局每行中子组件的起始位置及子组件间距的方法。
9.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,该程序被处理器执行时实现如权利要求1-7任一项所述的一种动态修改滚动布局每行中子组件的起始位置及子组件间距的方法。
...【技术特征摘要】
1.一种动态修改滚动布局每行中子组件的起始位置及子组件间距的方法,其特征在于,具体包括如下步骤:
2.如权利要求1所述的一种动态修改滚动布局每行中子组件的起始位置及子组件间距的方法,其特征在于,步骤二中,所述参数包括:recyclerview的布局宽度recyclerlayoutwidth、设计图中的每行数量spancount、设计图中首个子组件距离左边界的距离x、设计图中子组件间距y及设计图中子组件宽度itemwidth。
3.如权利要求1所述的一种动态修改滚动布局每行中子组件的起始位置及子组件间距的方法,其特征在于,步骤四中,通过自定义循环布局装饰器修改outrect.left的值,具体包括如下步骤:
4.如权利要求3所述的一种动态修改滚动布局每行中子组件的起始位置及子组件间距的方法,其特征在于,步骤s41具体包括:
5.如权...
【专利技术属性】
技术研发人员:杨志为,管利杰,席辉,李振龙,高泽磊,
申请(专利权)人:一汽奔腾汽车股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。