熱心推薦:
大家可能看到 android 的自帶的系統菜單比較難看,如圖:
很多應用都自己定義了系統菜單
,
QQ
游覽器
手機QQ
我今天做的就是類似手機QQ的菜單,效果圖如下:
這是我用PopupWindow
重寫一個菜單 ,popupwindow實現彈出菜單功能非常實用,在有布局中經常出現,給用戶體驗非常不錯 ,主要是控制菜單的顯示和消失(
動畫控制
),另外對文字和圖片
(
大小最好都一樣,否則最后效果有點難看
)
分別做了適配,其中對文字的長度進行了處理。
下面不用多說
,
進行代碼
.需要提一下的是
,
屏蔽一下系統菜單
,
需要下面兩步1. 需要創建至少一個系統菜單選項
2. 在
onMenuOpened
方法里顯示自己的菜單視圖,並返回
FALSE
package cn.mxgsa.menu; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.view.Gravity; import android.view.KeyEvent; import android.view.Menu; import android.view.View; 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 MenuLikeQQActivity extends Activity { /** * 定義popupwindow */ private PopupWindow popup; /** * 定義適配器 */ private MenuAdapter menuAdapter; //菜單項列表 private List<MenuInfo> menulists; //定義gridview private GridView menuGridView; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); initPopuWindows(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // TODO Auto-generated method stub return true; } /** * 設置PopupWindows */ private void initPopuWindows() { //初始化gridview menuGridView=(GridView)View.inflate(this, R.layout.gridview_menu, null); //初始化PopupWindow,LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT控制顯示 popup = new PopupWindow(menuGridView, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); // 設置menu菜單背景 popup.setBackgroundDrawable(getResources().getDrawable(R.drawable.menu_background)); // menu菜單獲得焦點 如果沒有獲得焦點menu菜單中的控件事件無法響應 popup.setFocusable(true); //設置顯示和隱藏的動畫 popup.setAnimationStyle(R.style.menushow); popup.update(); //設置觸摸獲取焦點 menuGridView.setFocusableInTouchMode(true); //設置鍵盤事件,如果按下菜單鍵則隱藏菜單 menuGridView.setOnKeyListener(new android.view.View.OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { // TODO Auto-generated method stub if ((keyCode == KeyEvent.KEYCODE_MENU) && (popup.isShowing())) { popup.dismiss(); return true; } return false; } }); //添加菜單按鈕事件 menuGridView.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub MenuInfo mInfo = menulists.get(arg2); popup.dismiss(); if (mInfo.ishide) { return; } switch (mInfo.menuId) { case MenuUtils.MENU_ADD_FRIEND: Toast.makeText(MenuLikeQQActivity.this, "添加好友", 1).show(); break; case MenuUtils.MENU_ADD_GROUP: Toast.makeText(MenuLikeQQActivity.this, "添加分組", 1).show(); break; case MenuUtils.MENU_EXIT: Toast.makeText(MenuLikeQQActivity.this, "退出應用", 1).show(); break; case MenuUtils.MENU_GROUP_ACCURATE: break; case MenuUtils.MENU_GROUP_CATEGORY: break; case MenuUtils.MENU_HELP: Toast.makeText(MenuLikeQQActivity.this, "檢查更新", 1).show(); break; case MenuUtils.MENU_LOGOUT: Toast.makeText(MenuLikeQQActivity.this, "切換用戶", 1).show(); break; case MenuUtils.MENU_SERCH_FRIEND: Toast.makeText(MenuLikeQQActivity.this, "搜索好友", 1).show(); break; case MenuUtils.MENU_SETTING: Toast.makeText(MenuLikeQQActivity.this, "設置", 1).show(); break; } } }); } @Override public boolean onMenuOpened(int featureId, Menu menu) { // TODO Auto-generated method stub if (popup != null) { menulists = MenuUtils.getMenuList(); menuAdapter = new MenuAdapter(this, menulists); menuGridView.setAdapter(menuAdapter); popup.showAtLocation(this.findViewById(R.id.linearlayout), Gravity.BOTTOM, 0, 0); } return false;// 返回為true 則顯示系統menu } @Override public boolean onPrepareOptionsMenu(Menu menu) { // TODO Auto-generated method stub menu.add("menu"); return super.onPrepareOptionsMenu(menu); } }