Android 通过AlertDialog创建伪菜单

1)效果图如下

单击Menu键跳出AlertDialog效果图如下


单击GridView中的“更多”选项效果图如下


2)具体代码如下

1.修改MainActivity.java代码如下

package com.example.androiddemo3;import java.util.ArrayList;import java.util.HashMap;import android.os.Bundle;import android.R.integer;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.support.v4.widget.SimpleCursorAdapter;import android.view.Gravity;import android.view.KeyEvent;import android.view.Menu;import android.view.View;import android.widget.AdapterView;import android.widget.GridView;import android.widget.SimpleAdapter;public class MainActivity extends Activity {private AlertDialog alertDialog=null;private GridView gridView1=null;/*菜单文字1*/private String[] menu_name_array1={"菜单1","菜单2","菜单3","菜单4","菜单5","更多"};/*菜单图片1*/private int[] menu_image_array1={R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher};/*菜单文字2*/private String[] menu_name_array2={"菜单6","菜单7","菜单8","菜单9","菜单10","返回"};/*菜单图片2*/private int[] menu_image_array2={R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);/*将SimpleAdapter和GridView绑定*/gridView1=new GridView(this);gridView1.setNumColumns(3);gridView1.setAdapter(getAdapter(menu_name_array1, menu_image_array1));/*单击GridView上的菜单(这里主要演示的是“更多”,“返回”)触发事件*/gridView1.setOnItemClickListener(new GridView.OnItemClickListener() {public void onItemClick(AdapterView<?> parent, View view,int position,long arg3){  HashMap<String, Object> item=(HashMap<String, Object>)parent.getItemAtPosition(position);String name=item.get("name").toString();if(name.equals("更多")){gridView1.setAdapter(getAdapter(menu_name_array2, menu_image_array2));}else if(name.equals("返回")){gridView1.setAdapter(getAdapter(menu_name_array1, menu_image_array1));}else{}}});/*创建AlertDialog*/alertDialog=new AlertDialog.Builder(this).setView(gridView1).create();/*当打开AlertDialog后监听按钮(“菜单”,“回车”)事件关闭AlertDialog*/alertDialog.setOnKeyListener(new AlertDialog.OnKeyListener() {@Overridepublic boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {if(keyCode==KeyEvent.KEYCODE_MENU||keyCode==KeyEvent.KEYCODE_BACK){//监听按钮alertDialog.dismiss();}return false;}});}/*将ArrayList中的数据和SimpleAdapter绑定*/private SimpleAdapter getAdapter(String[] names,int[] images){ArrayList<HashMap<String, Object>> items=getData(names, images);SimpleAdapter adapter=new SimpleAdapter(this, items, R.layout.item_menu, new String[]{"name","image"}, new int[]{R.id.item_name,R.id.item_image});return adapter;}/*将菜单文字和菜单图片存放到ArrayList*/private ArrayList<HashMap<String, Object>> getData(String[] names,int[] images){ArrayList<HashMap<String, Object>> items=new ArrayList<HashMap<String,Object>>();for(int i=0;i<names.length;i++){HashMap<String, Object> item=new HashMap<String, Object>();item.put("name", names[i]);item.put("image", images[i]);items.add(item);}return items;}@Override/*重写打开菜单按钮事件,显示AlertDialog*/public boolean onMenuOpened(int featureId, Menu menu) {if(alertDialog==null){alertDialog=new AlertDialog.Builder(this).setView(gridView1).show();}else{alertDialog.show();}return false;//返回true则显示系统menu}@Overridepublic 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;}}

2在layout创建item_menu.xml作为GridView的样式

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/RelativeLayout_Item"android:layout_width="fill_parent" android:layout_height="wrap_content"android:paddingBottom="5dip"><ImageView android:id="@+id/item_image"android:layout_centerHorizontal="true" android:layout_width="wrap_content"android:layout_height="wrap_content"></ImageView><TextView android:layout_below="@id/item_image" android:id="@+id/item_name"android:layout_centerHorizontal="true" android:layout_width="wrap_content"android:layout_height="wrap_content" android:text="选项"></TextView></RelativeLayout>


更多相关文章

  1. Android中使用log4j
  2. Android自动化测试初探(二): Hierarchyviewer 捕获Element的实现原
  3. Android(安卓)之 CheckBox 详解
  4. android ctl属性的实现过程
  5. Android中关于Audio库的知识
  6. Android(安卓)studio NDK开发
  7. 理解onMeasure
  8. 关于android中的各种路径对应的方法
  9. 高通android10.0默认赋予第三方apk权限

随机推荐

  1. android显示图片的两种方法
  2. Android(安卓)数据业务框架分析
  3. view的几种布局方式及实践
  4. Android(安卓)Junit 模块测试
  5. Android的APK文件的反编译方法
  6. Android(安卓)Debug Bridge 和Drozer安装
  7. Android中的内部类引起的内存泄露
  8. Android(安卓)资源文件的命名规则
  9. android Fragments详解二:创建Fragment
  10. 使用RxAndroid处理异步任务