文档章节

不同分辨率下网格布局的实现

今日竹石
 今日竹石
发布于 2014/04/24 15:47
字数 1012
阅读 471
收藏 8
点赞 0
评论 0

实现的效果:

项目布局:

具体代码如下:

1.MainActivity

package com.example.gridlayout_demo;


import java.util.ArrayList;

import java.util.List;


import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.Window;

import android.widget.GridView;

import android.widget.LinearLayout;


import com.example.gridlayout_demo.common.util.Tools;

import com.example.gridlayout_demo.model.BookInfo;


/**

 * 网格布局的demo

 * 

 * @作者: 刘倩</br>

 * @时间: 2014年4月24日 上午11:35:06</br>

 * @描述: 这个小demo主要是显示网格布局</br>

 */

public class MainActivity extends Activity

{

/** 显示的数据 */

private List<BookInfo> listData = new ArrayList<BookInfo>();

/** 网格布局 */

private GridLayoutAdapter gridLayoutAdapter;

/** 定义GridView */

private GridView gridView;

/** 线性布局 */

private LinearLayout linearLayout;


@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

// 设置无标题状态

requestWindowFeature(Window.FEATURE_NO_TITLE);

initView();

}


/**

* 初始化视图

*/

private void initView()

{

setContentView(R.layout.activity_main);

linearLayout = (LinearLayout) findViewById(R.id.activity_main_ll);

addListData();

getGridView();

}


/**

* 设置网格的布局

*/

private void getGridView()

{

if (gridView == null)

{

gridView = new GridView(MainActivity.this);

int screenWidth = Tools.getScreenWidth();

int screenHeight = Tools.getScreenHeight();

// 适配1024*600 屏幕(7寸手机)

if (screenHeight > 960 && screenHeight <= 1024 && screenWidth > 540

&& screenWidth <= 600)

{

gridView.setNumColumns(4);

} else

{

gridView.setNumColumns(3);

}

}

linearLayout.setVisibility(View.VISIBLE);

linearLayout.addView(gridView);

gridLayoutAdapter = new GridLayoutAdapter(MainActivity.this, listData);

gridView.setAdapter(gridLayoutAdapter);

}


/**

* 设置要显示的数据

*/

private void addListData()

{

int[] drawable =

{ R.drawable.ic_launcher, R.drawable.ic_launcher,

R.drawable.ic_launcher, R.drawable.ic_launcher,

R.drawable.ic_launcher, R.drawable.ic_launcher,

R.drawable.ic_launcher, R.drawable.ic_launcher,

R.drawable.ic_launcher, R.drawable.ic_launcher,

R.drawable.ic_launcher, R.drawable.ic_launcher };

String[] bookName =

{ "总裁的小妻子", "总裁的小妻子", "总裁的小妻子", "总裁的小妻子", "总裁的小妻子", "总裁的小妻子", "总裁的小妻子",

"总裁的小妻子", "总裁的小妻子", "总裁的小妻子", "总裁的小妻子", "总裁的小妻子" };

for (int i = 0; i < 12; i++)

{

BookInfo bookInfo = new BookInfo();

bookInfo.setBookIcon(drawable[i]);

bookInfo.setBookName(bookName[i]);

listData.add(bookInfo);

}

}


}


2.GridLayoutAdapter

package com.example.gridlayout_demo;


import java.util.List;


import android.app.Activity;

import android.view.Gravity;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.TextView;


import com.example.gridlayout_demo.common.util.Tools;

import com.example.gridlayout_demo.model.BookInfo;


/**

 * 网格布局适配器

 * 

 * @作者: 刘倩</br>

 * @时间: 2014年4月24日 下午1:55:51</br>

 * @描述: 主要实现网格的布局</br>

 */

public class GridLayoutAdapter extends BaseAdapter

{

/** 上下文 */

Activity activity;

/** 填充器 */

LayoutInflater layoutInflater;

/** 数据集合 */

List<BookInfo> listData;


public GridLayoutAdapter(Activity mainActivity, List<BookInfo> listData)

{

this.activity = mainActivity;

this.listData = listData;

layoutInflater = LayoutInflater.from(mainActivity);

}


@Override

public int getCount()

{

// 每行个数

int k = 0;

// 屏幕的宽度

int screenHeight = Tools.getScreenHeight();

// 屏幕的高度

int screenWidth = Tools.getScreenWidth();

if (screenHeight > 960 && screenHeight <= 1024 && screenWidth > 540

&& screenWidth <= 600)

{

k = 4;

} else

{

k = 3;

}

int virtualCount = listData.size();

if (virtualCount % k != 0)

{

virtualCount += (k - virtualCount % k);

}

return virtualCount;

}


@Override

public Object getItem(int position)

{

return listData.get(position);

}


@Override

public long getItemId(int position)

{

return position;

}


@Override

public View getView(int position, View convertView, ViewGroup parent)

{

ViewHolder viewHolder;

if (convertView == null)

{

viewHolder = new ViewHolder();

convertView = layoutInflater.inflate(R.layout.listivew_grid_layout,

null);

viewHolder.ivBookIcon = (ImageView) convertView

.findViewById(R.id.listview_grid_layout_iv_bookicon);

viewHolder.tvBookName = (TextView) convertView

.findViewById(R.id.listview_grid_layout_tv_bookname);

convertView.setTag(viewHolder);

} else

{

viewHolder = (ViewHolder) convertView.getTag();

}

int screenWidth = Tools.getScreenWidth();

int screenHeight = Tools.getScreenHeight();

// 适配1024*600 屏幕(7寸手机)

if (screenHeight > 960 && screenHeight <= 1024 && screenWidth > 540

&& screenWidth <= 600)

{

if (position % 4 == 0)

{// 左边

((LinearLayout) convertView)

.setGravity(Gravity.CENTER_HORIZONTAL);

convertView.setPadding(0, Tools.dipToPixel(5), 0,

Tools.dipToPixel(10));

} else if (position % 4 == 1)

{// 中间

convertView.setPadding(0, Tools.dipToPixel(5), 0,

Tools.dipToPixel(10));

((LinearLayout) convertView)

.setGravity(Gravity.CENTER_HORIZONTAL);

} else if (position % 4 == 2)

{// 右边

convertView.setPadding(0, Tools.dipToPixel(5), 0,

Tools.dipToPixel(10));

((LinearLayout) convertView)

.setGravity(Gravity.CENTER_HORIZONTAL);

} else if (position % 4 == 3)

{

convertView.setPadding(0, Tools.dipToPixel(5), 0,

Tools.dipToPixel(10));

((LinearLayout) convertView)

.setGravity(Gravity.CENTER_HORIZONTAL);

}

} else

{

if (position % 3 == 0)

{// 左边

((LinearLayout) convertView).setGravity(Gravity.RIGHT);

convertView.setPadding(Tools.dipToPixel(3),

Tools.dipToPixel(5), 0, Tools.dipToPixel(10));

} else if (position % 3 == 1)

{// 中间

convertView.setPadding(0, Tools.dipToPixel(5), 0,

Tools.dipToPixel(10));

((LinearLayout) convertView)

.setGravity(Gravity.CENTER_HORIZONTAL);

} else if (position % 3 == 2)

{// 右边

convertView.setPadding(0, Tools.dipToPixel(5),

Tools.dipToPixel(3), Tools.dipToPixel(10));

((LinearLayout) convertView).setGravity(Gravity.LEFT);

}

}


/* 网格布局 */

BookInfo bookInfo = listData.get(position);

viewHolder.ivBookIcon.setBackgroundResource(bookInfo.getBookIcon());

viewHolder.tvBookName.setText(bookInfo.getBookName());

return convertView;

}


/**

* 存放控件的类

* @作者: 刘倩</br>

* @时间: 2014年4月24日 下午1:59:20</br>

* @描述: 这里主要存放书封的ImageView和书名的TextView</br>

*/

class ViewHolder

{

/** 书封 */

ImageView ivBookIcon;

/** 书名 */

TextView tvBookName;

}

}

3.Tools.java

package com.example.gridlayout_demo.common.util;


import com.example.gridlayout_demo.common.application.ApplicationData;


import android.util.DisplayMetrics;


/**

 * 全局的工具类

 * 

 * @作者: 刘倩</br>

 * @时间: 2014年4月24日 下午2:16:20</br>

 * @描述: 全局的工具类,主要是一些常用的方法</br>

 */

public class Tools

{

/**

* 获得屏幕的宽度

* @param context

* @return

*/

public static int getScreenWidth()

{

DisplayMetrics dm = new DisplayMetrics();

dm = ApplicationData.globalContext.getApplicationContext()

.getResources().getDisplayMetrics();

return dm.widthPixels;

}


/**

* 获得屏幕的高度

* @param context

* @return

*/

public static int getScreenHeight()

{

DisplayMetrics dm = new DisplayMetrics();

dm = ApplicationData.globalContext.getApplicationContext()

.getResources().getDisplayMetrics();

return dm.heightPixels;

}


/**

* dip转成pixel

* @param dip

* @return

*/

public static int dipToPixel(float dip)

{

return (int) (dip

* ApplicationData.globalContext.getResources()

.getDisplayMetrics().density + 0.5);

}

}



    源码的下载地址:http://download.csdn.net/detail/u010820846/7245813

© 著作权归作者所有

共有 人打赏支持
今日竹石
粉丝 41
博文 227
码字总数 181312
作品 0
朝阳
程序员
使用 jQuery Mobile 和 CSS3 实现响应式设计

jQuery Mobile 框架是一个 JavaScript 库,您可以用它来轻松地创建了一个移动版本的网站,将现有的 Web 页面转换成触摸友好的网站和应用程序。jQuery Mobile 框架允许用户通过 Web 浏览器直接...

IBMdW ⋅ 2012/05/27 ⋅ 3

响应式布局小结

根据维基百科定义:弹性网格布局、弹性图片和媒体查询整合起来,并将其命名为RWD(Responsive Web Design,响应式布局)。下面分别介绍: 媒体查询 首先看下百度百科对响应式布局定义 百度百...

GTReload ⋅ 2016/11/21 ⋅ 0

UI Layout 的设计

WP8 和 Win8 UI 布局之 XAML XAML 是 eXtensible Application Markup Language 的英文缩写,相应的中文名称为可扩展应用程序标记语言,它是微软公司为构建应用程序用户界面而创建的一种新的描...

失足处男的倒霉孩子 ⋅ 2013/12/24 ⋅ 0

十大前端开发框架(下)

本文由伯乐在线 -厉瑶 翻译。未经许可,禁止转载! 英文出处:Site Point。欢迎加入翻译组。 在《十大前端开发框架(上)》中我们了解了跟Bootstrap相关的一系列前端开发框架,如果你对于Boo...

伯乐在线 ⋅ 2013/07/01 ⋅ 0

编写第一个响应式页面

本文为大家讲解如何使用一种科学的方法实现网页设计,从原理上搞清楚什么是响应式设计,并实现一个简易的响应式设计框架,以此为基础,编写出第一个响应式页面。 不知道现在大家还读村上春树...

凡尘里的一根葱 ⋅ 2015/11/24 ⋅ 0

Bootstrap

一、使用Bootstrap要引用的文件   要使用Bootstrap,基本架构要引用如下文件: <link href="bootstrap.min.css" rel="stylesheet" type="text/css" /> <script type="text/javascript" sc......

Zero零_度 ⋅ 2015/09/20 ⋅ 0

2012网页设计趋势(上)

纯粹主义者会说,伟大的设计是永恒的。是的,在一个理想世界中,我们可以忽视趋势与流行。 但是实事求是地讲,跟踪和融入设计的趋势是很有价值的,尤其是网站方面。让我们面对现实:网络时刻...

未来十年 ⋅ 2011/12/25 ⋅ 0

Android学习笔记(二) 布局方式的介绍

Android应用的开发的一项内容就是用户界面开发了。Android提供了大量功能丰富的UI组件。Android的界面是由布局和组件协同完成的。 Android所有UI组件都继承了View类,View类有一个重要的子类...

半夏alvin ⋅ 2014/03/05 ⋅ 0

BootStrap网格布局

  如何使用BootStrap样式   BootStrap与其他的开源库类似,直接引用它的css样式文件就可以使用了。   在代码中,直接使用class就可以使用其定义的样式,例如使用它button样式,就可以按...

青夜之衫 ⋅ 2017/12/04 ⋅ 0

《css揭秘》学习笔记(一)

第0章 关于本书 1、检测属性 snippetid="2469057" snippetfilename="blog201707031_4539286" name="code" class="javascript">function testproperty(property){var root = document.documen......

u014744118 ⋅ 2017/07/03 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

tcp/ip详解-链路层

简介 设计链路层的目的: 为IP模块发送和接收IP数据报 为ARP模块发送ARP请求和接收ARP应答 为RARP模块发送RARP请求和接收RARP应答 TCP/IP支持多种链路层协议,如以太网、令牌环往、FDDI、RS-...

loda0128 ⋅ 今天 ⋅ 0

spring.net aop代码例子

https://www.cnblogs.com/haogj/archive/2011/10/12/2207916.html

whoisliang ⋅ 今天 ⋅ 0

发送短信如何限制1小时内最多发送11条短信

发送短信如何限制1小时内最多发送11条短信 场景: 发送短信属于付费业务,有时为了防止短信攻击,需要限制发送短信的频率,例如在1个小时之内最多发送11条短信. 如何实现呢? 思路有两个 截至到当...

黄威 ⋅ 昨天 ⋅ 0

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 昨天 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 昨天 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 昨天 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 昨天 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 昨天 ⋅ 0

SpringBoot简单使用ehcache

1,SpringBoot版本 2.0.3.RELEASE ①,pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELE......

暗中观察 ⋅ 昨天 ⋅ 0

Spring源码解析(八)——实例创建(下)

前言 来到实例创建的最后一节,前面已经将一个实例通过不同方式(工厂方法、构造器注入、默认构造器)给创建出来了,下面我们要对创建出来的实例进行一些“加工”处理。 源码解读 回顾下之前...

MarvelCode ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部