文档章节

Android GridView 实现合并单元格效果

千里山南
 千里山南
发布于 2014/08/01 11:38
字数 372
阅读 5460
收藏 7
package com.example.test;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends Activity {
	private static GridView mGridView;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		mGridView = new GridView(getApplicationContext());
		MAdapter adapter = new MAdapter(mGridView.getContext(), new String[]{
			"你好1","你好2","你好3","你好4","你好5","你好6","你好7","你好8","你好9","你好10",
			"你好11","你好12","你好13","你好14","你好15","你好16","你好17","你好18","你好19","你好20",
			"你好21","你好22","你好23","你好24","你好25","你好26","你好27","你好28","你好29","你好30"
		});
		LinearLayout headLayout = new LinearLayout(getApplicationContext());
		LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
				LinearLayout.LayoutParams.FILL_PARENT, 300);
		headLayout.setLayoutParams(params);
		headLayout.setBackgroundColor(Color.RED);
		mGridView.setAdapter(adapter);
		mGridView.setNumColumns(2);
		setContentView(mGridView);
	}
	
	static class MAdapter extends BaseAdapter{

		private String[] items;
		private Context context;
		public MAdapter(Context context, String[] items) {
			this.items = items;
			this.context = context;
		}
		
		@Override
		public int getCount() {
			return items.length;
		}

		@Override
		public Object getItem(int position) {
			return position;
		}

		@Override
		public long getItemId(int position) {
			return position;
		}
		
		@Override
		public int getItemViewType(int position) {
			return super.getItemViewType(position);
		}
		
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			
			TextView textView = null;
			if (position %4 == 0) {
				textView = new MyText(context);
				AbsListView.LayoutParams params = new AbsListView.LayoutParams(
						AbsListView.LayoutParams.FILL_PARENT, 100);
				textView.setLayoutParams(params);
				textView.setTextColor(Color.BLACK);
				textView.setTextSize(20);
				textView.setText(items[position]);
				textView.setBackgroundColor(0x88FF0000);
				textView.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL);
			} else {
				textView = new TextView(context);
				AbsListView.LayoutParams params = new AbsListView.LayoutParams(
						AbsListView.LayoutParams.FILL_PARENT, 200);
				textView.setLayoutParams(params);
				textView.setTextColor(Color.BLACK);
				textView.setTextSize(20);
				textView.setText(items[position]);
				textView.setVisibility(View.VISIBLE);
				if (position %4 == 1) {		// GridView的行高由该行最后一个元素的高度决定
					AbsListView.LayoutParams params2 = new AbsListView.LayoutParams(
							AbsListView.LayoutParams.FILL_PARENT, 100);
					textView.setLayoutParams(params2);
					textView.setVisibility(View.INVISIBLE);
				}
				textView.setGravity(Gravity.CENTER);
			}
			return textView;
		}
		
		class MyText extends TextView {
			public MyText(Context context) {
				super(context);
			}
			@Override
			protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
				super.onMeasure(widthMeasureSpec, heightMeasureSpec);
				int targetWidth = mGridView.getMeasuredWidth()
	                    - mGridView.getPaddingLeft()
	                    - mGridView.getPaddingRight();
	            widthMeasureSpec = MeasureSpec.makeMeasureSpec(targetWidth,
	                    MeasureSpec.getMode(widthMeasureSpec));
	            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
			}
		}
	}
}


© 著作权归作者所有

千里山南
粉丝 8
博文 26
码字总数 8030
作品 1
合肥
私信 提问
Android学习笔记(8) - GridView与ImageView

简单一点吧,就瞧瞧那个Grid的效果,Android提供了一个GridView,不过从APIDemo中看来,它似乎与PC上的GRID差别还 是挺大的,更像那个IconView的感觉。不知道Android中如何实现表格界面?虽然...

红薯
2009/07/15
3.8K
1
Android UI学习和布局优化

FrameLayout 先来看官方文档的定义:FrameLayout是最简单的一个布局对象。它被定制为你屏幕上的一个空白备用区域,之后你可以在其中填充一个单一对象 — 比如,一张你要发布的图片。所有的子...

Jerikc
2014/04/14
451
1
【压岁干货】精彩技术博客+优秀源码集锦

虽然2015年已经过了一月有余,但在中国,好像只有过了春节才算进入新的一年。眼看着这也春节倒计时了,大家好像又都忙了起来,赶项目赶项目…… 从DevStore整理了一些优秀的技术博客和源码作...

牵着蜗牛去西藏
2015/02/04
1K
4
利用GridView实现手机菜单功能

最近刚学习Andrioid 开发,昨日看到大牛级网友hellgv写的关于《Android入门第八篇之GridView(九宫图)》之后想到做一个模仿手机菜单界面的布局,于是有了今天下面的入门级作品,这个作品与大牛...

长平狐
2012/08/14
198
0
找到几个很好的Android开源项目

1.android-swipelistview SwipeListView是一个Android List View实现,实现了自定义ListView单元格,可通过滑动来显示扩展面板。开发者可直接登陆Google Play下载安装其Demo应用。 2.Vitami...

vane_
2014/03/30
320
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2.1K
14
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
38
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
61
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部