新东西003--android Gridview控制显示高度

一:需求

最近产品决定对公司软件做大修改,他想要实现网易云学习的标签栏效果,如下图(在A区域需要有一系列标签栏(标签栏多少不定,但每行三个,显示时如果超过屏幕2/3就要显示进度条,也就是最大不超过屏幕2/3的显示),B区域是一个listview,中间就是几个button,当B区域往上滑动的时候A区域自动收起,但在最上方显示当前选择的标签,点击标签弹出浮动的标签栏,当B区域滑动到最顶的时候,A区域开始显示.)



在上面的需求上,主要有两个问题

1.上面那一系列不知道多少个的是用button显示还是其他组件显示.作为一个资深(呵呵)开发者,肯定是不想用动态布局,一个一个button往上加的,所以我用了gridview,每个里面装一个button

2.A区域是作为B区域的headview存在还是一个跟B区域同级的布局存在.

开始的时候想把A区域当作B区域这个Listview的headview来处理,这样就可以实现A跟随B区域一起上下滑动,看起来就像一个完整的个体.但在实现的时候,在listview的滑动传递的时候出了问题,因为listview需要接受滚动事件,上面的gridview因为显示高度不明确,所以可能需要接受滑动事件.总的来说,作为headview在固定高度的时候可以采用,但要实现这种随机高度可能要压缩的,还是不太好实现.所以我就放弃了.我就将A区域的gridview作为B区域的同级view存在,同时,为了实现产品的需求,只是在A展开收起的时候添加动画即可.


Gridview控制显示高度

我原本期望Gridview有maxline或者maxheight之类的属性,那样问题就变的简单了,但是没有.于是琢磨着在height属性上做处理,想在布局文件中写死肯定是不行的,因为高度个数未知,所以就采用了动态布局.在解决动态布局的问题上,就是动态控制高度.我所做的操作分为两步

1.获取屏幕的显示高度

2.计算填充完数据之后的gridview的高度(一定要是填充完数据之后的,否则就是0,没有意义),如果高度大于屏幕的2/3,则将gridview的height设置为屏幕的2/3,如果小于,则不改变heigt的值.(下面为部分代码)

public void setGridviewHeight()
	{
		int needHeight = (((labes.length + 2) / 3 + 1) * dp2Px(this, 40.0f));
		if (needHeight <= ((screenHeight * 4) / 7))
		{
			//表示空间显示足够,不做处理
		}
		else
		{
			LinearLayout.LayoutParams params = (android.widget.LinearLayout.LayoutParams) gridview.getLayoutParams();
			params.height = (screenHeight * 4) / 7 - dp2Px(this, 40.0f);
			params.width = screenWidth;
			gridview.setLayoutParams(params);
			
			//第二个gridview
			RelativeLayout.LayoutParams params2 = (android.widget.RelativeLayout.LayoutParams) gridview2.getLayoutParams();
			params2.height = params.height;
			params2.width = params.width;
			gridview2.setLayoutParams(params2);
		}
	}

3.浮动gridview的解决

实际上就是两个gridview(浮动的那个根据逻辑显示,隐藏即可)


总结:

功能看起来很炫,但是按照写的流程分析,写下来还是没有难度的.后期有时间会整理一个例子再上传

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值