Android之UI布局:LinearLayout,RelativeLayout,FrameLayout,属性,ListView,Style,theme

简介

布局本身是不能显示出任何数据, 它可以包含一些子视图, 并控制子视图的布局
常用的Layout:
	LinearLayout
	RelativeLayout
	FrameLayout
	ListView
	GridView

LinearLayout

线性布局: 用来控制其子View以水平或垂直方式展开显示
重要属性: 
	orientation(方向)
	layout_weight(权重)

layout_weight(权重)的值:
=0(默认值): 指定多大空间就占据多大的空间
>0:  将父视图中的可用空间进行分割, 值越大权重就越大, 占据的比例就会越大
>
Layout_weight的使用场景
将布局的宽度或高度平均分成几个等份
垂直方向上占用中间所有空间 或 水平方向上占用中间所有空间

文档里面说:
如果想将父容器分割成几个部分,就将子容器的权重设置成一样的
而且哪一个方向需要划分成几部分,哪个方向的的长度设置成0dp
比如在宽度上面要分成几部分,就设置 android:layout_width="0dp"
Equally weighted children

To create a linear layout in which each child uses the same 
amount of space on the screen, set the android:layout_height 
of each view to "0dp" (for a vertical layout) or the 
android:layout_width of each view to "0dp" (for a horizontal layout). 
Then set the android:layout_weight of each view to "1".

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="To" />
    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="Subject" />
    <EditText
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gravity="top"
        android:hint="Message" />
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Reset" />
        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Send" />
    </LinearLayout>
</LinearLayout>

RelativeLayout

相对布局: 用来控制其子View以相对定位的方式进行布局显示
相对布局相关属性分类:
	兄弟视图之间: 同方向对齐, 反方向对齐
	与父视图之间: 同方向对齐, 居中
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <EditText
        android:id="@+id/message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
       	android:layout_alignParentLeft="true"
       	android:layout_alignParentRight="true"
       	android:hint="Message">
       	<!-- 这个是获取焦点 -->
        <requestFocus />
    </EditText>
    <Button android:id="@+id/button_ok"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="OK"
        android:layout_below="@id/message"
        android:layout_alignRight="@id/message"/>
     <Button android:id="@+id/button_Cancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Cancel"
        android:layout_alignTop="@id/button_ok"
        android:layout_toLeftOf="@id/button_ok"
        android:layout_marginRight="20dp"/>
</RelativeLayout>

FrameLayout

帧布局中的每一个子View都代表一个画面,
默认以屏幕左上角作为( 0,0 )坐标,
按定义的先后顺序依次逐屏显示,后面出现的会覆盖前面的画面, 
通过子View的android:layout_gravity 属性来指定子视图的位置
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    
    <!-- 
    	gravity: 控制是当前视图的内容/子View
    	layout_gravity: 控制当前视图自己
     -->
    <TextView android:layout_width="280dp"
        android:layout_height="280dp"
        android:layout_gravity="center"
        android:background="#33ffff"/>
    
    <TextView android:layout_width="240dp"
        android:layout_height="240dp"
        android:layout_gravity="center"
        android:background="#33ccff"/>
    
    <TextView android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_gravity="center"
        android:background="#33aaff"/>
 
    <TextView android:layout_width="160dp"
        android:layout_height="160dp"
        android:layout_gravity="center"
        android:background="#3399ff"/>
</FrameLayout>

视图标签的属性

任何View的属性

常用的最基本属性
内边距属性 padding
外边距属性 margin
基本属性:
id				为控件指定相应的ID  @+id/idname
layout_width 	指定当前视图的宽度
layout_height	指定当前视图的高度
text 			指定控件当中显示的文字
textSize		指定控件当中字体的大小 
background		指定该控件所使用的背景(图片|颜色)
layout_gravity	控件本身相对于父视图的位置
grivity			指定控件中的内容的基本位置

在这里插入图片描述

只有RelativeLayout有的属性

反方向对齐属性 to/above/below
同方向对齐属性  align
相对父视图的属性  alignparent/center
同方向对齐
android:layout_alignLeft="@id/button_ok"	和后面绑定的id的view在左边对齐
android:layout_alignTop=""
android:layout_alignRight=""
android:layout_alignBottom=""

反方向对齐
android:layout_toLeftOf=""	
我的view的右边和后面引用的view的左边对齐,这里直接理解成在后面引用id的view的哪一边
android:layout_toRightOf=""
android:layout_above=""
android:layout_below=""

与父视图同方向对齐
android:layout_alignParentLeft=""
android:layout_alignParentTop=""
android:layout_alignParentRight=""
android:layout_alignBottom=""

相对父视图居中
android:layout_centerHorizontal=""
android:layout_centerVertical=""
android:layout_centerInParent=""

只有LinearLayout有的属性

权重属性  weight
方向属性 oritation

ListView

ListView是一种用来显示多个可滑动项(Item)列表的的ViewGroup
需要使用Adapter将集合数据和每一个Item所对应的布局动态适配到ListView中显示
显示列表: listView.setAdapter(adapter)
更新列表: adapter.notifyDataSetChanged()

在这里插入图片描述

ArrayAdapter:  显示最简单的列表(文本)
集合数据为List<String>或String[]

SimpleAdapter: 显示复杂的列表
集合数据必须是List<Map<String,Object>>类型

BaseAdapter: 显示复杂的列表
集合数据可以是任意类型的集合List<Xxx>

SimpleCursorAdapter: 显示复杂的列表
集合数据是数据库查询结果集

ArrayAdapter

activity_list_view文件

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/listView1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
</ListView>

list_view_item文件

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="50dp" 
    android:textSize="20dp"
    android:gravity="center_vertical">
</TextView>
package com.example.hello;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class ListViewActivity extends Activity
{
	public ListView listView;
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		/*
		 * 我们是先加载里面有ListView的布局,然后根据id初始化里面的ListView
		 * 然后准备好ArrayAdapter对象,然后listView.setAdapter(adapter);
		 * 将数据展示在ListView里面
		 */
		setContentView(R.layout.activity_list_view);
		listView =(ListView) findViewById(R.id.listView1);
		//我们需要准备数据
		String[] data={"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O"};
		//准备好ArrayAdapter对象
		//context: 上下文件对象, 一般为Acivity对象
		//resource: Item的布局文件标识
		//objects: 需要显示的数据集合(Array或List)
		ArrayAdapter<String> adapter= new ArrayAdapter<String>(this, R.layout.list_view_item, data);
		//设置Adapter显示列表
		listView.setAdapter(adapter);
	}
}

这里有点有意思的小细节,就是现在我们的数据中有15条数据, 那么你可能理所当然想着在listView里面会创建15个TextView对象 但是实际上只是创建了九个对象,因为我们设置了每一条数据的大小 那么在屏幕的一页显示的是8条数据,最多就可以显示九条数据(就是最开始 那一条显示一半,最后面那条也是显示一半,那么系统就只是创建了9个TextView对象 当向下拉的时候,当最上面那条数据完全覆盖后会重复利用来显示最下面即将要出来的数据

SimpleAdapter

SimpleAdapterActivity.java

package com.example.hello;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class SimpleAdapterActivity extends Activity
{
	public ListView simplelistView;
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_list_view);
		simplelistView =(ListView) findViewById(R.id.listView1);
		//我们需要准备数据
		List<Map<String, Object>> data=new  ArrayList<Map<String,Object>>();
		Map<String, Object> map=new HashMap<String, Object>();
		map.put("icon", R.drawable.a1);
		map.put("name", "1号哆啦A梦");
		map.put("context", "content1");
		data.add(map);
		
		map=new HashMap<String, Object>();
		map.put("icon", R.drawable.a2);
		map.put("name", "2号哆啦A梦");
		map.put("context", "content2");
		data.add(map);
		
		map=new HashMap<String, Object>();
		map.put("icon", R.drawable.a3);
		map.put("name", "3号哆啦A梦");
		map.put("context", "content3");
		data.add(map);
		
		String[] from ={"icon","name","context"};
		int[] to ={R.id.SimpleimageView1,R.id.SimpleName,R.id.SimpleContent};
		
		/*
		 * 准备好ArrayAdapter对象
		 * context: 上下文件对象, 一般为Acivity对象
		 *	data: 需要显示的数据集合
		 *	resource: Item布局文件标识
		 *	from: map对象中的key的数组, 用于得到对应的value
		 *	to: Item布局文件中的子view的id的数组
		 *	from和to结合作用就是将data中的数据放在哪一个布局文件中的组件中
		 */
		SimpleAdapter adapter=new SimpleAdapter(this, data, R.layout.item_simple_adapter, from, to);
		//设置Adapter显示列表
		simplelistView.setAdapter(adapter);
	}
}

activity_list_view.xml

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/listView1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

</ListView>

item_simple_adapter.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <ImageView
        android:id="@+id/SimpleimageView1"
        android:layout_width="200dp"
        android:layout_height="307dp"
        android:src="@drawable/a1" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center_vertical" >

        <TextView
            android:id="@+id/SimpleName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView" />

        <TextView
            android:id="@+id/SimpleContent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView" />
    </LinearLayout>
</LinearLayout>

BaseAdapter

MyBaseAdapterActivity.java

package com.example.temp1;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class MyBaseAdapterActivity extends Activity
{
	public ArrayList<CatInfo> data;
	public ListView simplelistView;
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_list_view);
		simplelistView =(ListView) findViewById(R.id.listView1);
		//上面和之前一样,下面开始准备数据
		data=new ArrayList<CatInfo>();
		data.add(new CatInfo(R.drawable.a1, "1号哆啦A梦", "1号哆啦A梦Context"));
		data.add(new CatInfo(R.drawable.a2, "2号哆啦A梦", "2号哆啦A梦Context"));
		data.add(new CatInfo(R.drawable.a3, "3号哆啦A梦", "3号哆啦A梦Context"));
		
		//创建BaseAdapter对象
		MyBaseAdapter myBaseAdapter = new MyBaseAdapter();
		//显示出去
		simplelistView.setAdapter(myBaseAdapter);
	}
	class MyBaseAdapter extends BaseAdapter 
	{
		//返回数据集合的数量
		@Override
		public int getCount()
		{
			return data.size();
		}

		//返回指定下标对应的数据对象
		@Override
		public Object getItem(int position)
		{
			return data.get(position);
		}

		@Override
		public long getItemId(int position)
		{
			return 0;
		}
		/**
		 * 返回指定下标所对应的item的View对象
		 * position	:就是下标
		 * convertView:可复用的缓存Item视图对象, 前n+1个为null
		 * parent:每一个item的父元素,就是ListView对象
		 * 后面的一种写法效率不高,按照我们之前说的
		 * 如果屏幕显示的是n个视图对象,那么就会加载n+1个视图对象
		 * 然后用户划上去的时候就会重复利用第一个已经开不见的视图来重新设置数据
		 * 然后重新放在最下面进行显示
		 * 这里的convertView就是啦,
		 * 前面n+1个是null,后面就是可以重复利用的了
		 * 只要不是null就重复利用,是null就重新创建
		 */
		@Override
		public View getView(int position, View convertView, ViewGroup parent)
		{
			//先根据position设置对应的数据
				//得到当前行的数据对象
			CatInfo catInfo = data.get(position);
				//得到子View对象
			if(convertView==null)
			{
				//加载子视图对象
				convertView=View.inflate(MyBaseAdapterActivity.this, R.layout.item_simple_adapter, null);				
			}
			ImageView imageView=(ImageView) convertView.findViewById(R.id.SimpleimageView1);
			TextView name=(TextView) convertView.findViewById(R.id.SimpleName);
			TextView context=(TextView) convertView.findViewById(R.id.SimpleContent);
				//设置数据
			imageView.setImageResource(catInfo.icon);
			name.setText(catInfo.name);
			context.setText(catInfo.context);
			return convertView;
		}
//		@Override
//		public View getView(int position, View convertView, ViewGroup parent)
//		{
//			//先根据position设置对应的数据
//			//得到当前行的数据对象
//			CatInfo catInfo = data.get(position);
//			//得到子View对象
//			//加载子视图对象
//			View view=View.inflate(MyBaseAdapterActivity.this, R.layout.item_simple_adapter, null);
//			ImageView imageView=(ImageView) view.findViewById(R.id.SimpleimageView1);
//			TextView name=(TextView) view.findViewById(R.id.SimpleName);
//			TextView context=(TextView) view.findViewById(R.id.SimpleContent);
//			//设置数据
//			imageView.setImageResource(catInfo.icon);
//			name.setText(catInfo.name);
//			context.setText(catInfo.context);
//			return view;
//		}
		
	}
}

CatInfo.java

package com.example.temp1;

public class CatInfo
{
	public int icon;
	public String name;
	public String context;
	public int getIcon()
	{
		return icon;
	}
	public void setIcon(int icon)
	{
		this.icon = icon;
	}
	public String getName()
	{
		return name;
	}
	public void setName(String name)
	{
		this.name = name;
	}
	public String getContext()
	{
		return context;
	}
	public void setContext(String context)
	{
		this.context = context;
	}
	public CatInfo(int icon, String name, String context)
	{
		super();
		this.icon = icon;
		this.name = name;
		this.context = context;
	}
	@Override
	public String toString()
	{
		return "CatInfo [icon=" + icon + ", name=" + name + ", context="
				+ context + "]";
	}
	
}

activity_list_view.xml

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/listView1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

</ListView>

item_simple_adapter.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <ImageView
        android:id="@+id/SimpleimageView1"
        android:layout_width="200dp"
        android:layout_height="307dp"
        android:src="@drawable/a1" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center_vertical" >

        <TextView
            android:id="@+id/SimpleName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView" />

        <TextView
            android:id="@+id/SimpleContent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView" />

    </LinearLayout>

</LinearLayout>

样式(Style)

什么是样式:
	多个视图属性的集合, 在写布局时, 当多个视图有不少相同的属性时,
	 可以把这些相同的属性放在一起在styles.xml中定义成一个Style, 
	 而在布局文件中使用@style/style_name统一引用
作用: 
	复用视图标签属性
系统样式:
	Android也定义了些系统样式可以使用
	使用系统样式: @android:style/xxx

主题(theme)

理解: 
	主题的本质也是style
	在styles.xml中定义, 在manifest.xml中引用
作用: 
	复用视图标签属性
目标: 
	针对整个应用或某个Activity的界面,整个应用就是所有的activity都是这个主题
	如果只是某个应用设置那么就是只用这个activity有这个样式
系统常用主题:
	@android:style/Theme.Light.NoTitleBar : 没有标题 
	@android:style/Theme.Light.NoTitleBar.Fullscreen: 全屏
	@android:style/Theme.Dialog : 对话框

显示手机所有页面例子

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#c610ef"
        android:text="手机应用"
        android:padding="5dp"
        android:textSize="25sp" 
        android:gravity="center"/>

    <ListView
        android:id="@+id/app_list"
        android:layout_width="match_parent"
        android:layout_height="fill_parent" >
    </ListView>

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <ImageView
        android:id="@+id/appImage"
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:src="@android:drawable/sym_action_call" />

    <TextView
        android:id="@+id/appName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@id/appImage"
        android:text="应用名称" 
        android:layout_marginLeft="10dp"
        android:textSize="20sp"/>
    
</RelativeLayout>

package com.example.temp1;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class AppActivity extends Activity implements OnItemLongClickListener
{
/*
1. 分析界面结构, 编写布局文件	
	1). 整体的布局: ListView
	2). item的布局: RelativeLayout
2. 使用ListView+BaseAdapter显示所有应用信息的列表
	1). 得到所有应用信息数据对象的集合List<AppInfo>
	2). 定义BaseAdapter的实现类:  getView()
3. 给ListView设置item的点击监听, 在回调方法中做响应
4. 给LitView设置Item的长按监听, 在回调方法中做响应

 */
	public ListView listView;
	public List<AppInfo> list;
	public AppAdapter appAdapter;
	
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.app);
		//初始化成员变量
		listView =(ListView) findViewById(R.id.app_list);
		list=getAllAppInfos();
		appAdapter=new AppAdapter();
		
		listView.setAdapter(appAdapter);
		
		//给ListView设置item的点击监听, 在回调方法中做响应
		listView.setOnItemClickListener(new OnItemClickListener()
		{
			/*
			 * parent:ListView
			 * view:当前行的item视图对象
			 * position:当前行的下标
			 */
			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id)
			{
				String appName = list.get(position).getAppName();
				Toast.makeText(AppActivity.this, appName, 0).show();
			}
		});
		listView.setOnItemLongClickListener(this);
		
	}
	
	class AppAdapter extends BaseAdapter
	{
		@Override
		public int getCount()
		{
			return list.size();
		}

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

		@Override
		public long getItemId(int position)
		{
			return 0;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent)
		{
			//1. 如果convertView是null, 加载item的布局文件
			//2. 得到当前行数据对象
			//3. 得到当前行需要更新的子View对象
			//4. 给视图设置数据
			//5. 返回convertView
			if(convertView==null)
			{
				convertView=View.inflate(AppActivity.this, R.layout.app_item, null);
			}
			AppInfo appInfo = list.get(position);
			ImageView appImage = (ImageView) convertView.findViewById(R.id.appImage);
			TextView appName = (TextView) convertView.findViewById(R.id.appName);
			
			appImage.setImageDrawable(appInfo.getIcon());
			appName.setText(appInfo.getAppName());
			return convertView;
		}
	}
	
	/*
	 * 得到手机中所有应用信息的列表
	 * AppInfo
	 *  Drawable icon  图片对象
	 *  String appName
	 *  String packageName
	 */
	protected List<AppInfo> getAllAppInfos() {

		List<AppInfo> list = new ArrayList<AppInfo>();
		// 得到应用的packgeManager
		PackageManager packageManager = getPackageManager();
		// 创建一个主界面的intent
		Intent intent = new Intent();
		intent.setAction(Intent.ACTION_MAIN);
		intent.addCategory(Intent.CATEGORY_LAUNCHER);
		// 得到包含应用信息的列表
		List<ResolveInfo> ResolveInfos = packageManager.queryIntentActivities(
				intent, 0);
		// 遍历
		for (ResolveInfo ri : ResolveInfos) {
			// 得到包名
			String packageName = ri.activityInfo.packageName;
			// 得到图标
			Drawable icon = ri.loadIcon(packageManager);
			// 得到应用名称
			String appName = ri.loadLabel(packageManager).toString();
			// 封装应用信息对象
			AppInfo appInfo = new AppInfo(icon, appName, packageName);
			// 添加到list
			list.add(appInfo);
		}
		return list;
	}

	@Override
	public boolean onItemLongClick(AdapterView<?> parent, View view,
			int position, long id)
	{
		//删除当前的行
		//首先删除当前行的数据
		list.remove(position);
		//然后更新视图的数据
		appAdapter.notifyDataSetChanged();//通知更新列表, 使用所有缓存的item的视图对象
		listView.setAdapter(appAdapter);//显示列表, 不会使用缓存的item的视图对象
		return true;
	}

}

package com.example.temp1;

import android.graphics.drawable.Drawable;

/**
 * 应用信息的封装类
 */
public class AppInfo {

	private Drawable icon;// 应用图标
	private String appName;// 应用名称
	private String packageName;// 包名

	public AppInfo(Drawable icon, String appName, String packageName) {
		super();
		this.icon = icon;
		this.appName = appName;
		this.packageName = packageName;
	}

	public AppInfo() {
		super();
	}

	public Drawable getIcon() {
		return icon;
	}

	public void setIcon(Drawable icon) {
		this.icon = icon;
	}

	public String getAppName() {
		return appName;
	}

	public void setAppName(String appName) {
		this.appName = appName;
	}

	public String getPackageName() {
		return packageName;
	}

	public void setPackageName(String packageName) {
		this.packageName = packageName;
	}

	@Override
	public String toString() {
		return "AppInfo [icon=" + icon + ", appName=" + appName
				+ ", packageName=" + packageName + "]";
	}

}

网格视图列表例子

<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/gridView1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:numColumns="3"
    android:layout_marginTop="10dp" 
    android:verticalSpacing="8dp">

</GridView>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="80dp"
    android:layout_height="80dp"
    android:orientation="vertical" 
    android:gravity="center">

    <ImageView
        android:id="@+id/icon"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="名称" 
        android:textSize="16sp"/>

</LinearLayout>

package com.example.apphouse;

import android.app.Activity;
import android.os.Bundle;
import android.widget.GridView;

public class MainActivity extends Activity
{
	private GridView gridView;
	private MyAdapter myAdapter;
	
	String[] names = new String[] { "手机防盗", "通讯卫士", "软件管理", "流量管理", "进程管理",
			"手机杀毒", "缓存清理", "高级工具", "设置中心" };

	int[] icons = new int[] { R.drawable.widget01, R.drawable.widget02,
			R.drawable.widget03, R.drawable.widget04, R.drawable.widget05,
			R.drawable.widget06, R.drawable.widget07, R.drawable.widget08,
			R.drawable.widget09 };
	
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		gridView =(GridView) findViewById(R.id.gridView1);
		myAdapter=new MyAdapter(this, names, icons);
		
		gridView.setAdapter(myAdapter);
	}
}
package com.example.apphouse;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class MyAdapter extends BaseAdapter
{
	public Context context;
	public String[] names;
	public int[] icons;
	
	
	public MyAdapter(Context context, String[] names, int[] icons)
	{
		super();
		this.context = context;
		this.names = names;
		this.icons = icons;
	}

	@Override
	public int getCount()
	{
		return names.length;
	}

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

	@Override
	public long getItemId(int position)
	{
		return 0;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent)
	{
		if(convertView==null)
		{
			convertView=View.inflate(context, R.layout.grid_view_item, null);
		}
		//然后将对应数据设置到对应的位置
		ImageView imageView = (ImageView) convertView.findViewById(R.id.icon);
		TextView textView = (TextView) convertView.findViewById(R.id.name);
		imageView.setImageResource(icons[position]);
		textView.setText(names[position]);
		return convertView;
	}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ReflectMirroring

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值