• Android仿360手机卫士九宫图


    今天周末无聊着,看着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>

      代码里面该有的注释都有了,所以我就不多啰嗦了!

  • 相关阅读:
    性能测试理论知识
    接口测试笔试题
    测试计划与测试报告
    java基础面试题
    软件测试人员必备的linux命令
    tomcat各目录(文件)作用
    常见的面试题
    LoadRunner中怎么设置密码参数化与用户名关联
    数据库索引总结(二)
    数据库索引总结(一)
  • 原文地址:https://www.cnblogs.com/maiweibiao/p/2166619.html
Copyright © 2020-2023  润新知