【android】GridView如何适配不同屏幕
来源:互联网 发布:经传软件账号密码 编辑:程序博客网 时间:2024/05/16 09:12
GridView和ListView一样,都是项目中常用的控件之一,那么本篇文章要讲的是GridView如何适应不同大小的屏幕,首先,我们来看一张效果图,如下:
每行为四个item,上下左右间距大概2dp,而且会根据不同的屏幕大小,每个item中的图片随之缩放或放大以适应屏幕(始终保持正方形的样子),我们大多数在使用GridView的时候可能会把columnWidth设置了一个定值如70dp,然后numColumns为自动适配,这样虽然也可以,但是很影响用户体验,那么像上图这样的效果,应该怎么实现呢?
已经不屑于看这篇文章的大牛们请绕道啦,那么还不会实现这种效果的童鞋们此刻有什么思路呢?如何才能保证每行四个item,且自动适应屏幕大小?我们一步一步来分析:首先保证每行四个item不是很简单的事情嘛,把numColumns="4"不就可以了?然后呢,如何确定每个item的宽高呢?其实同样很简单,要想根据屏幕大小来决定item的宽高,不就得先知道屏幕的宽度吗?
- WindowManager windowManager = getWindowManager();
- Display display = windowManager.getDefaultDisplay();
- wh=display.getWidth();
解:每个item的宽度=(wh-(5*2))/4;
即:行宽-各间距后再除以每行item的个数不就得出每个item应占的宽度了吗,然后高度和宽度相等即可。
但还有一个问题是,我们在xml中定义时,一般都用的dp而非px,这如何解决?那么我们把dp转换为px不就成了吗?
- public static int Dp2Px(Context context, float dp) {
- final float scale = context.getResources().getDisplayMetrics().density;
- return (int) (dp * scale + 0.5f);
- }
- <GridView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:fadingEdge="none"
- android:gravity="center_horizontal"
- android:horizontalSpacing="2dp"
- android:listSelector="@null"
- android:numColumns="4"
- android:scrollbars="none"
- android:stretchMode="columnWidth"
- android:verticalSpacing="2dp" >
- </GridView>
然后我们在adapter中的getView方法中动态设置每个item的宽高(注意:item的布局文件不要设置固定宽高,全部fill_parent即可):
- AbsListView.LayoutParams param = new AbsListView.LayoutParams(宽度,高度);
- convertView.setLayoutParams(param);
demo可参考下篇文章: 阻尼回弹效果的ScrollView嵌套GridView
转自:http://blog.csdn.net/baiyuliang2013/article/details/40181367
- 【android】GridView如何适配不同屏幕
- Android GridView如何适配不同屏幕
- GridView如何适配不同屏幕
- GridView如何适配不同屏幕
- GridView如何适配不同屏幕
- GridView如何适配不同屏幕
- android如何处理不同屏幕的适配
- Android应用如何适配不同的屏幕
- Android适配不同屏幕
- Android适配不同屏幕
- android gridView屏幕适配,以及GridView的各种属性
- Android 适配不同分辨率屏幕
- Android 适配不同的屏幕
- Android适配不同的屏幕
- Android适配不同的屏幕
- Android 适配不同屏幕(手机,平板)
- Android 适配不同的屏幕
- Android适配不同版本、屏幕
- [WebGL入门]二十七,多纹理
- Keil定义字符串数组到ROM中
- 随便写写
- CQUPT WEEKLY TRAINING (2)DIV2 解题报告
- java集合框架
- 【android】GridView如何适配不同屏幕
- 第一篇:iOS的书籍和一些大神的blog链接(持续更新)
- HDU-1237-简单计算器
- 面试题积累(一)
- php中成功打开pgsql扩展(windows下)
- NYOJ6174问题
- 【JUnit4.10源代码分析】0导航
- 毛澤東是我們中國的最最最最厲害的人物
- 数塔(杭电2084)