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>
- Android中自定义Menu
- Android自定义Menu(TabMenu)
- android自定义Menu
- Android自定义Menu背景
- Android 自定义Menu
- android studio自定义menu
- Android 中的menu以及自定义menu
- Android 中自定义 Menu 资源
- Android 中自定义 Menu 资源
- Android 中自定义 Menu 资源
- android 自定义menu菜单样式
- Android WebView 自定义Context Menu
- android自定义view之自定义卫星menu
- Android自定义Menu ------仿优酷Android客户端Menu样式的实现
- (转)Android 中自定义 Menu 资源
- Android如何自定义menu的背景
- Android 两种自定义的Menu
- android自定义menu,PopUpWindow弹出菜单
- Big-Endian and Little-Endian
- hdu 4750 Count The Pairs 并查集+递推(2013 ACM/ICPC Asia Regional Nanjing Online 1003)
- 真正的sap后门程序_andreas wiegenstein
- Repeater里面绑定a标签的方法
- Delphi XE 5 Android初探
- android自定义Menu
- 数塔
- 服务器错误
- Common Subsequence
- FOR命令批处理中处理隐藏文件
- bfs
- poj 1573 Robot Motion
- 树的最长直径
- 为何人人都将成为程序员?看32位美国顶尖精英怎么说!