/**
*
* @author Administrator
*
* 自訂Menu,而不用系統內建的Menu
*
* 系統Menu原理:當我們單擊Menu按鈕的時候,系統彈出一個PopupWindow
* 這個PopupWindow上面放置的就是菜單
*
* 為了讓我們單擊Menu按鈕的時候,彈出我們自己的定義的Menu,
* 只要捕獲keyDown事件即可,再keyDown事件裡,找到我們自己的Menu視窗,並將其顯示出來
*
* 而定義一個Menu視窗就是要用到PopupWindow了
*
* 然後再PopupWindow裡放入我們自訂的布局檔案,就一切如我們所願了
*
* 我們自己可以布局了,哈哈,是不是就可以加背景,換顏色,為所欲為了???
*
*/
public class MainActivity extends Activity {
private PopupWindow menuWindow;
private LinearLayout menuStart,menuPause,menuStop;
private LayoutInflater inflater; //這個是將xml中的布局顯示在螢幕上的關鍵類
private View layout;
private boolean menu_display = false;
//在onKeyDown中截獲系統Menu單擊事件
public boolean onKeyDown(int keyCode, KeyEvent event){
//就是如此簡單,呵呵
if(keyCode == KeyEvent.KEYCODE_MENU){
if(!menu_display){
//擷取LayoutInflater執行個體
inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
//這裡的main布局是在inflate中加入的哦,以前都是直接this.setContentView()的吧?呵呵
//該方法返回的是一個View的對象,是布局中的根
layout = inflater.inflate(R.layout.menu, null);
//下面我們要考慮了,我怎樣將我的layout加入到PopupWindow中呢???很簡單
menuWindow = new PopupWindow(layout,LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); //後兩個參數是width和height
//menuWindow.showAsDropDown(layout); //設定彈出效果
menuWindow.showAtLocation(this.findViewById(R.id.main), Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0); //設定layout在PopupWindow中顯示的位置
//如何擷取我們main中的控制項呢?也很簡單
menuStart = (LinearLayout)layout.findViewById(R.id.layout_start);
menuPause = (LinearLayout)layout.findViewById(R.id.layout_pause);
menuStop = (LinearLayout)layout.findViewById(R.id.layout_stop);
//下面對每一個Layout進行單擊事件的註冊吧。。。
//比如單擊某個MenuItem的時候,他的背景色改變
//事先準備好一些背景圖片或者顏色
menuStart.setOnClickListener(startListener);
menuPause.setOnClickListener(pauseListener);
menuStop.setOnClickListener(stopListener);
menu_display = true;
}else{
//如果當前已經為顯示狀態,則隱藏起來
menuWindow.dismiss();
menu_display = false;
}
return false;
}else if(keyCode == KeyEvent.KEYCODE_BACK){
//如果使用者按得是返回鍵,則不顯示菜單
if(menu_display){
//當前菜單顯示狀態,則隱藏
menuWindow.dismiss();
}else{
//結束當前
System.exit(0);
}
return false;
}else{
return false;
}
}
private View.OnClickListener startListener = new View.OnClickListener() {
public void onClick(View arg0) {
Toast.makeText(MainActivity.this, "start", Toast.LENGTH_LONG).show();
}
};
private View.OnClickListener pauseListener = new View.OnClickListener() {
public void onClick(View arg0) {
Toast.makeText(MainActivity.this, "pause", Toast.LENGTH_LONG).show();
}
};
private View.OnClickListener stopListener = new View.OnClickListener() {
public void onClick(View arg0) {
Toast.makeText(MainActivity.this, "stop", Toast.LENGTH_LONG).show();
}
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE); //去掉標題
//注意:requestWindowFeature必須在setContentView之前
setContentView(R.layout.main);
//全屏設定
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
}