775
技術社區[雲棲]
教你如何創建類似QQ的android彈出菜單
大家可能看到android的自帶的係統菜單比較難看,如圖:

很多應用都自己定義了係統菜單,
QQ遊覽器

手機QQ

我今天做的就是類似手機QQ的菜單,效果圖如下:

這是我用PopupWindow重寫一個菜單 ,popupwindow實現彈出菜單功能非常實用,在有布局中經常出現,給用戶體驗非常不錯 ,主要是控製菜單的顯示和消失(動畫控製),另外對文字和圖片(大小最好都一樣,否則最後效果有點難看)分別做了適配,其中對文字的長度進行了處理。
下麵不用多說,進行代碼.需要提一下的是,屏蔽一下係統菜單,需要下麵兩步1.
需要創建至少一個係統菜單選項

2. 在onMenuOpened方法裏顯示自己的菜單視圖,並返回FALSE
整體代碼:MenuLikeQQActivity.java
複製代碼
講述的很簡單,需要對大家有幫助下麵附應用的源碼
MenuLikeQQ.rar (149.85
KB, 下載次數: 2566)

-
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);
-
}
- }
講述的很簡單,需要對大家有幫助下麵附應用的源碼

最後更新:2017-04-02 16:48:08
上一篇:
javascript中未初始化的變量和未定義的變量的區別
下一篇:
android自定義menu,PopUpWindow彈出菜單
[連載]《大數據之路:阿裏巴巴大數據實踐》之日誌采集
projecteuler_problem1
title
獲得eclipse發布的web項目WEB-INFO下的路徑(最淳樸的方法)
一百萬以內的素數
保持java線程間可見性的5種方式
RHEL安裝heartbeat報錯: heartbeat: udpport setting must precede media statements
收集Java麵試題知識點(Java基礎部分三)
magento -- 判斷一個產品是否是一個可配置產品的子產品
Waiting for Slave Worker to release partition