android自定义Menu

来源:互联网 发布:java ee下载 编辑:程序博客网 时间:2024/05/22 08:02

实现界面如下:

onCreateOptionsMenu方法用于创建选项菜单,在显示选项菜单之前,系统会调用onMenuOpened方法,如果该方法返回false,则在onCreateOptionsMenu中创建的选项菜单将不会显示,因此,在onMenuOpened方法中弹出用于显示自定义菜单的窗口。

完整代码如下:

package cn.yh.menuopened;import android.os.Bundle;import android.app.Activity;import android.view.Gravity;import android.view.KeyEvent;import android.view.Menu;import android.view.View;import android.view.View.OnKeyListener;import android.view.ViewGroup.LayoutParams;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.GridView;import android.widget.PopupWindow;import android.widget.Toast;public class MainActivity extends Activity implements OnKeyListener,OnItemClickListener {private PopupWindow popupWindow;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//在弹出窗口中显示的GridView对象GridView gvPopupWindow = (GridView) getLayoutInflater().inflate(R.layout.popup_window, null);//gridAdapter向GridView对象提供数据GridAdapter gridAdapter = new GridAdapter(this);gvPopupWindow.setAdapter(gridAdapter);gvPopupWindow.setOnKeyListener(this);gvPopupWindow.setOnItemClickListener(this);/** *  public PopupWindow(View contentView, int width, int height) */popupWindow = new PopupWindow(gvPopupWindow, LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);popupWindow.setFocusable(true);}@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);menu.add("menu");return super.onCreateOptionsMenu(menu);}@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int poistion,long arg3) {// TODO Auto-generated method stubpopupWindow.dismiss();Toast.makeText(this, Const.GRID_ITEM_TEXT_LIST[poistion],Toast.LENGTH_LONG).show();}@Overridepublic boolean onKey(View v, int keyCode, KeyEvent event) {// TODO Auto-generated method stubswitch (keyCode) {case KeyEvent.KEYCODE_BACK:if(popupWindow.isShowing()){popupWindow.dismiss();}break;default:break;}return false;}@Overridepublic boolean onMenuOpened(int featureId, Menu menu) {// TODO Auto-generated method stubif(popupWindow != null){if(popupWindow.isShowing()){popupWindow.dismiss();}else{View layout = getLayoutInflater().inflate(R.layout.activity_main, null);/** * public void showAtLocation(View parent, int gravity, int x, int y) */popupWindow.showAtLocation(layout, Gravity.CENTER, 0, 0);}}/** * 返回false,所以在onCreateOptionsMenu中添加的选项菜单不会显示 */return false;}}

提供数据的GridAdapter:

package cn.yh.menuopened;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;public class GridAdapter extends BaseAdapter {private Context mContext;private LayoutInflater mLayoutInflater;public GridAdapter(Context mContext) {this.mContext = mContext;this.mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn Const.GRID_ICON_ID_LIST.length;}@Overridepublic Object getItem(int arg0) {// TODO Auto-generated method stubreturn null;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn 0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubif (convertView == null)convertView = mLayoutInflater.inflate(R.layout.grid_item, null);ImageView ivGridItemIcon = (ImageView) convertView.findViewById(R.id.ivGridItemIcon);TextView tvGridItemText = (TextView) convertView.findViewById(R.id.tvGridItemText);ivGridItemIcon.setImageResource(Const.GRID_ICON_ID_LIST[position]);tvGridItemText.setText(Const.GRID_ITEM_TEXT_LIST[position]);return convertView;}}

工具类Const:

package cn.yh.menuopened;public class Const {public final static int[] GRID_ICON_ID_LIST = new int[] { R.drawable.add,R.drawable.browser, R.drawable.facebook, R.drawable.google,R.drawable.simile, R.drawable.voice, R.drawable.write,R.drawable.yahoo, R.drawable.youtube };public final static String[] GRID_ITEM_TEXT_LIST = new String[] { "添加","浏览器", "Facebook", "Google", "笑脸", "Voice", "书写", "雅虎", "YouTube" };}

布局文件:

<?xml version="1.0" encoding="utf-8"?><GridView xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:id="@+id/gvPopupWindow"    android:padding="10dp"    android:gravity="center"    android:horizontalSpacing="10dp"    android:verticalSpacing="10dp"    android:stretchMode="columnWidth"    android:columnWidth="80dp"    android:numColumns="auto_fit" >    </GridView>

 

<?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"     android:gravity="center">    <ImageView android:layout_width="50dp"    android:layout_height="50dp"    android:id="@+id/ivGridItemIcon"/>    <TextView android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:id="@+id/tvGridItemText"    android:textColor="#ccefde"/></LinearLayout>
原创粉丝点击