新东西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(浮动的那个根据逻辑显示,隐藏即可)

总结:

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

时间: 2024-08-28 03:57:33

新东西003--android Gridview控制显示高度的相关文章

Android GridView 分组显示(仿京东商品分类)

Android GridView 分组显示(仿京东商品分类) Gridview分组显示, 仿京东分类效果 GridView 分组显示使用的第三方开源库: StickyGridHeadersGridView , 下载地址: https://github.com/TonicArtos/StickyGridHeaders 大致实现步骤: 1. adapter:  SPCategoryRightAdapter extends BaseAdapter implements StickyGridHeader

android GridView显示相同尺寸图片以及预览功能

项目描述: GridView加载图片,在程序中控制各个图片尺寸一致,点击图片进行预览,可以滑动切换查看不同的界面,可以手势控制图片缩放,效果图如下: 1.GridView控制每个控件大小一致 GridView中的控件大小在程序中控制,思路就是获取屏幕宽高,减去控件之间的空隙,除以每一行控件的个数,就是控件的宽,可以将控件的高设置与宽一致. 首先获取屏幕宽高 public static int screenWidth;//屏幕宽度 WindowManager windowManager = get

从Android Studio 说开去--未来程序员工具的发展方向——版本兼容,以及为什么我们总是要学SB&quot;新&quot;东西

抽时间学习Android. 刚刚下载了 http://developer.android.com/sdk/installing/studio.html#Updating Getting Started with Android Studio 下载安装,很简单. 启动前,先把翻墙的工具准备好,并且开动之. 否则是不行了. 我再牢骚几句啊(我自己要是开公司,门口第一个标语栏就是:大声报怨.一个连抱怨都不会的人,我不信他是一个正常人,更别提创造力了.当然,我招人也只会招参与型的人,只抱怨,但事事弃权,

android 读取通讯录显示到gridview

........... <GridView android:id="@+id/gridView1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignLeft="@+id/button2" android:layout_below="@+id/button2" and

GridView 的item高度很高,快崩溃了

============问题描述============ 主布局中下面是一个gridView,点击后显示另外一个gridView,但是item的布局显示高度不合适,整体丑陋,求指点,谢谢!! 主布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     andr

Android 获取并显示远程图片 Picasso框架的使用(二)

转载请注明出处:明桑Android 在上篇文章中介绍了Picasso的基本用法,这篇文章作为以上的练习: 本文代码github地址:UsePicasso 实现效果:(动图请耐心加载) 需要的知识点 了解Picasso框架的使用:Android 获取并显示远程图片 Picasso框架的使用(一) 知道如何自定义GridView 我们需要编写两个布局文件:activity_gridview.xml activity_main.xml 以及ImageAdapter类.GridImageActivity

Android GridView无法填充Activity的解决办法

GridView相信也很常见,但是GridView有一个缺点就是无法控制整个GridView的高度,只能通过子view去控制其高度. 项目中往往会有这样需求,让一个Gridview铺满整个屏幕 关键点: 在GridView的adapter中对item高度进行计算,然后再设置. 核心代码: @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if(c

线程安全变量控制显示隐藏loading框

一.线程安全变量控制显示隐藏loading框 问题描述: 同一页面有两个异步网络请求,第一个请求开始,loading旋转,第二个请求开始loading旋转,第一个结束,loading停止旋转,可是这时第二个请求还没有结束,然后loading就结束了,于是问题就来了. 解决方案: 二.由上面问题引申出的问题: 1. #import <libkern/OSAtomic.h> 这段话是从网上copy过来的,总结了一下原子操作的作用.但是文中提到的osbase.h文件找不到.可能是因为版本升级我的li

1.30 Java周末总结①控制显示多少位小数位②读txt和写txt模拟ATM数据库

1.30 Java周末总结①控制显示多少位小数位②读txt和写txt模拟ATM数据库 一.控制显示多少位小数位 有些时候小数位数太多了,想保留多少位小数,这里介绍一种利用四舍五入保留想要的小数位数Math.round四舍五入到整数位,所以把小数乘以整10或整百,在除以整10或整百,就得到想要的位数了 double a = 3.14159265359;double weishu = 5;double b = Math.pow(10,weishu);a = Math.round(a*b)/b; 二.