android自定义Menu

实现界面如下:

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;

	@Override
	protected 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);
	}

	@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);
		menu.add("menu");
		return super.onCreateOptionsMenu(menu);
	}

	@Override
	public void onItemClick(AdapterView<?> arg0, View arg1, int poistion,
			long arg3) {
		// TODO Auto-generated method stub
		popupWindow.dismiss();
		Toast.makeText(this, Const.GRID_ITEM_TEXT_LIST[poistion],
				Toast.LENGTH_LONG).show();
	}

	@Override
	public boolean onKey(View v, int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		switch (keyCode) {
		case KeyEvent.KEYCODE_BACK:
			if(popupWindow.isShowing()){
				popupWindow.dismiss();
			}
			break;
		default:
			break;
		}
		return false;
	}

	@Override
	public boolean onMenuOpened(int featureId, Menu menu) {
		// TODO Auto-generated method stub
		if(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);
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return Const.GRID_ICON_ID_LIST.length;
	}

	@Override
	public Object getItem(int arg0) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		if (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>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值