Jeff Lee blog: http://www.cnblogs.com/Alandre/ (泥沙砖瓦浆木匠),retain the url when reproduced ! Thanks

今天我们来Android UI第二讲:实现DridView的菜单样式

下载链接:

http://files.cnblogs.com/Alandre/AndroidUI2.rar

效果图:

image

第一步:实现Guid Item

首先确定的是,里面有四个元素。每个元素的组合为 图片+文字。所以我们先定义一个xml:

/AndroidUI2/res/layout/main_menu_item.xml:

<?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" >
	<ImageView 
	    android:id="@+id/ItemImageView"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:layout_gravity="center"/>
	<TextView 
	    android:id="@+id/ItemTextView"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	    android:gravity="center"/>
</LinearLayout>

第二步:通过定义的适配器SimpleAdapter 将你需要的Item add进GridView

先在视图中定义GridView:

/AndroidUI2/res/layout/activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <LinearLayout 
		    android:layout_width="match_parent"
		    android:layout_height="wrap_content"
		    android:layout_marginLeft="12dp"
			android:layout_marginRight="12dp"
		    android:background="@color/white"
		    android:orientation="horizontal"
		    android:gravity="top">
		    
		    <GridView 
		        android:id="@+id/gridview_main_menu"
		        android:layout_width="fill_parent"
		        android:layout_height="wrap_content"
		        android:columnWidth="90dp"
		        android:stretchMode="columnWidth"
		        android:numColumns="4"
		        android:horizontalSpacing="10dp"
		        android:gravity="center_horizontal"
		        >
		    </GridView>
		    
	    </LinearLayout>

</RelativeLayout>

然后Activity核心代码:

package com.example.androidui2;


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


import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class MainActivity extends Activity
{

	private GridView mainMenuGridView;
	private int[] mainMenuImageRes = {R.drawable.circle,R.drawable.circle,R.drawable.circle,R.drawable.circle};
	private String[] mainMenuStrs  = {"拨号","所有联系人","使用说明","退出"};
	
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mainMenuGridView = (GridView)findViewById(R.id.gridview_main_menu);
		
		initView();
	}

	// init views
	private void initView()
	{
		// init main-menu 
		List<HashMap<String, Object>> datas = new ArrayList<HashMap<String,Object>>();
		int length = mainMenuStrs.length;
		for (int i = 0; i < length; i++)
		{
			HashMap<String, Object> map = new HashMap<String, Object>();
			map.put("ItemImageView", mainMenuImageRes[i]);
			map.put("ItemTextView", mainMenuStrs[i]);
			datas.add(map);
		}
		SimpleAdapter menuAdapter = new SimpleAdapter(
				MainActivity.this,datas, 
				R.layout.main_menu_item, 
				new String[]{"ItemImageView","ItemTextView"},
				new int[]{R.id.ItemImageView,R.id.ItemTextView} );
		mainMenuGridView.setAdapter(menuAdapter);
		mainMenuGridView.setOnItemClickListener(new MainMenuItemOnClick());
		
	}

	// Main Menu Item On Click Function
	public class MainMenuItemOnClick implements OnItemClickListener
	{

		/** arg0 : The AdapterView where the click happened  
		*	arg1 : The view within the AdapterView that was clicked
		*   arg2 : The position of the view in the adapter
		*	arg3 : The row id of the item that was clicked
		**/
		public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
				long arg3)
		{
			HashMap<String, Object> item = (HashMap<String, Object>)arg0.getItemAtPosition(arg2);
			if (item.get("ItemTextView").equals(mainMenuStrs[0]))
			{
				 Toast.makeText(getApplicationContext(), mainMenuStrs[0],  
		                    Toast.LENGTH_SHORT).show();  
			}
			if (item.get("ItemTextView").equals(mainMenuStrs[1]))
			{
				 Toast.makeText(getApplicationContext(), mainMenuStrs[1],  
		                    Toast.LENGTH_SHORT).show();  
			}
			if (item.get("ItemTextView").equals(mainMenuStrs[2]))
			{
				 Toast.makeText(getApplicationContext(), mainMenuStrs[2],  
		                    Toast.LENGTH_SHORT).show();  
			}
			if (item.get("ItemTextView").equals(mainMenuStrs[3]))
			{
				 Toast.makeText(getApplicationContext(), mainMenuStrs[3],  
		                    Toast.LENGTH_SHORT).show();  
			}
		}
		
	}
		
	@Override
	public boolean onCreateOptionsMenu(Menu menu)
	{
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

解释:

定义所需要的 item 数组:

private int[] mainMenuImageRes = {R.drawable.circle,R.drawable.circle,R.drawable.circle,R.drawable.circle};
	private String[] mainMenuStrs  = {"拨号","所有联系人","使用说明","退出"};

初始化用SimpleAdapter添加

SimpleAdapter menuAdapter = new SimpleAdapter(
				MainActivity.this,datas, 
				R.layout.main_menu_item, 
				new String[]{"ItemImageView","ItemTextView"},
				new int[]{R.id.ItemImageView,R.id.ItemTextView} );
		mainMenuGridView.setAdapter(menuAdapter);

然后添加动作的时候,我们巧妙的获取到ItemImageView的值进行判断,然后动作。

HashMap<String, Object> item = (HashMap<String, Object>)arg0.getItemAtPosition(arg2);
			if (item.get("ItemTextView").equals(mainMenuStrs[0]))

总结

GridView 可以作为平面化菜单的好东西。

更多相关文章

  1. 多个dex文件定义了Landroid/支持/v13/app/FragmentCompatICS。
  2. 自定义BaseAdapter,在主Activity页面调用显示歌曲列表
  3. Android 自定义控件高度设置onMeasure方法
  4. Android自定义View-----上下拖动布局--SlideContentLayout
  5. Android从零开搞系列:自定义View(15)仿天天美剧拖动卡片的效果(下)
  6. DialogFragment自定义dialog的位置和大小
  7. 如何使用2个旋转圆圈获得与ICS相同的未定义ProgressBar?
  8. java常量的定义
  9. 自定义标签 Unable to find setter method for attribute

随机推荐

  1. Android JobIntentService
  2. 2.5.5 使用DatePickerDialog, TimePicker
  3. 对话框式Activity的设置
  4. ch014 Android AppWidget
  5. android 的View Tree和 DecorView(Android
  6. android edittext 隐藏键盘
  7. Android事件处理
  8. Android和H5的交互
  9. android 退出程序 seekbar mediaplayer
  10. Android RecyclerView DividerItemDecora