文档章节

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

今日竹石
 今日竹石
发布于 2014/04/24 15:47
字数 1012
阅读 504
收藏 8

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

实现的效果:

项目布局:

具体代码如下:

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
码字总数 181391
作品 0
朝阳
程序员
私信 提问
加载中

评论(0)

使用 jQuery Mobile 和 CSS3 实现响应式设计

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

IBMdW
2012/05/27
8.8K
3
响应式布局小结

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

GTReload
2016/11/21
0
0
静态布、自适应布局、流式布局、响应式布局、弹性布局的概念和区别

一、静态布局 传统的web设计,网页尺寸一般使用px作为单位,大部分pc端宣传网站都是用的这种布局,固定像素尺寸的网页是匹配固定像素尺寸显示器的最简单的方法,但是他的兼容性不是很完全。 ...

osc_ha0jymdv
2018/04/02
5
0
BootStrap之前奏响应式布局

BootStrap 简介 概念: 课程目标: 响应式布局技术 了解BootStrap前端框架 一.响应式布局 1.1 历史问题 回顾之前HTML+CSS的布局方式,都是使用像素(px)来布局网页的,可是现在随着用户使用终...

tea_year
05/14
0
0
页面布局的几种方式(静态化布局,流式布局,自适应布局,响应式布局,弹性布局)

一、静态布局(static layout)   即传统Web设计,网页上的所有元素的尺寸一律使用px作为单位。 1、布局特点   不管浏览器尺寸具体是多少,网页布局始终按照最初写代码时的布局来显示。常...

osc_1tlbypwh
2018/09/07
2
0

没有更多内容

加载失败,请刷新页面

加载更多

可以让你用到老的IntelliJ idea 破解法子

看下效果图如下: 安装的时候选择试用,然后进入idea 下载插件 插件地址 然后将jetbrains-agent.jar文件拖入到idea中 然后重启 然后选择Activation code 然后就ojbk了...

布袋和尚_爱吃鱼
27分钟前
17
0
获取类对象的四种方式

/* * 获取类对象的三种方式 * */ public static void main(String[] args) throws Exception { //1、Class.forName 【建议】 Class<?> clazz1 = Class.forName("com.czxy.demo2.Person"); //......

费先森
42分钟前
21
0
2020中台建设-技术中台的搭建和运营

2020中台建设-技术中台的搭建和运营

Original123
49分钟前
25
0
CTO:不要在 Java 代码中写 set/get 方法了,逮一次罚款

前言 what?你的 Java 代码中还充斥着大量的 set/get 方法? 我们在刚开始学习 Java 语言的时候讲过,面向对象的三大特征就是封装,继承,和多态。在 Java 中,要保证封装性,需要将成员变量...

码农突围
59分钟前
21
0
为什么不推荐去做安全测试工程师?

对,你没看错。我不推荐大家去做安全测试工程师。 为什么不推荐大家去做安全测试? 今天,很多软件并没有经过专门的安全测试便运行在互联网上,它们携带着各类安全漏洞直接暴露在公众面前,其...

爱码小哥
今天
32
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部