今天周末无聊着,看着360手机卫士(Android版)的九宫图菜单,模仿它做了一个,
同时也在程序里涉及到了弹出框和菜单等Android程序最基本的东西,效果图如下:
第一张是在模拟器上的效果,后面三张是在真机(defy)上的尝试效果
GridView9Activity.java 文件代码:
package demo.apk;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
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 GridView9Activity extends Activity {
String[] arrAppName = new String[] { "系统清理", "手机杀毒", "流量监控", "隐私空间",
"短信拦截", "防盗备份", "快速拨号", "工具箱", "设置" };
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
GridView gridview = (GridView) findViewById(R.id.grd);
// 生成动态数组,并且转入数据
ArrayList<HashMap<String, Object>> lstImageItem = new ArrayList<HashMap<String, Object>>();
for (int i = 0; i < 9; i++) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("ItemImage", R.drawable.app91 + i);// 添加图像资源的ID
map.put("ItemText", arrAppName[i]);// 按序号做ItemText
lstImageItem.add(map);
}
SimpleAdapter saImageItems = new SimpleAdapter(this, lstImageItem,// 数据来源
R.layout.gitem,// 一个定义列表项目的视图布局的资源唯一标识。布局文件将至少应包含哪些在to中定义了的名称。
// 一个将被添加到Map上关联每一个项目的列名称的列表
new String[] { "ItemImage", "ItemText" },
// 应该在参数from显示列的视图。这些应该全是TextView。在列表中最初的N视图是从参数from中最初的N列获取的值。
new int[] { R.id.ItemImage, R.id.ItemText });
// 添加并且显示
gridview.setAdapter(saImageItems);
// 添加消息处理
gridview.setOnItemClickListener(new ItemClickListener());
}
// 当AdapterView被单击(触摸屏或者键盘),则返回的Item单击事件
class ItemClickListener implements OnItemClickListener {
public void onItemClick(AdapterView<?> arg0,// The AdapterView where the
// click happened
View arg1,// The view within the AdapterView that was clicked
int arg2,// The position of the view in the adapter
long arg3// The row id of the item that was clicked
) {
// 在本例中arg2=arg3
HashMap<String, Object> item = (HashMap<String, Object>) arg0
.getItemAtPosition(arg2);
String str = (String) item.get("ItemText");
if (str.equals("快速拨号")) {
Intent intent = new Intent("android.intent.action.CALL_BUTTON");
startActivity(intent);
}
else {
Intent inte=new Intent();
inte.setClass(GridView9Activity.this, EActivity.class);
startActivity(inte);
//GridView9Activity.this.finish();
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
// 显示指定菜单项的组号、ID、排序号、标题
menu.add(R.id.about, // 组号
1, // 唯一的ID号
1, // 排序号
"关于"); // 标题
menu.add(R.id.exit,// 组号
2, // 唯一的ID号
2, // 排序号
"退出"); // 标题
// 返回true显示菜单,如果返回的是false将不会显示菜单
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// 响应每个菜单项(通过菜单项的ID)
case 1:
// 关于
break;
case 2:
// 退出
new AlertDialog.Builder(GridView9Activity.this)
.setMessage("确定退出吗?").setNegativeButton("否",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
}
}).setPositiveButton("是",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0,
int arg1) {
System.exit(0);
}
}).show();
break;
default:
return super.onOptionsItemSelected(item);
}
// 返回true表示处理完菜单项的事件,不需要将该事件继续传播下去了
return true;
}
private static Boolean isExit = false;
private static Boolean hasTask = false;
Timer tExit = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
isExit = false;
hasTask = true;
}
};
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// 如果按下的是返回键
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (isExit == false) {
isExit = true;
// 输出一条提示在屏幕上
Toast.makeText(this, "再按一次后退键退出应用程序", Toast.LENGTH_SHORT)
.show();
if (!hasTask) {
tExit.schedule(task, 2000);
}
} else {
// 对Activity执行消亡操作
finish();
// System.exit(0);
}
}
// 这里需要返回false,否则所有按键将会失效
return false;
}
}
main.xml文件代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="vertical" android:weightSum="1"
>
<TextView android:id="@+id/textView1" android:layout_height="60dp"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="仿360手机卫士九宫图" android:layout_width="fill_parent"
android:gravity="center" >
</TextView>
<GridView android:id="@+id/grd" android:layout_width="fill_parent"
android:numColumns="auto_fit" android:verticalSpacing="10dp"
android:horizontalSpacing="10dp" android:columnWidth="90dp"
android:stretchMode="columnWidth" android:gravity="center"
android:layout_height="wrap_content"></GridView>
</LinearLayout>
代码里面该有的注释都有了,所以我就不多啰嗦了!