自定義菜單
思路:使用新的控件,使它的行爲接近菜單的特性
菜單的特性:
顯示:按menu鍵
關閉:1) 再按menu鍵
2) 按back鍵
// 監聽back鍵,如果用戶點擊了back
// 判斷如果菜單顯示,則關閉菜單,同時,不關閉activity
3) 處於暫停狀態
4) 點擊某個菜單項
5) 點擊菜單和通知欄以外的區域(不會響應點擊事件),
1. 創建菜單:在onCreate()中添加如下代碼: mainLayout = findViewById(R.id.main); View contentView = getLayoutInflater().inflate(R.layout.optionsmenu, null); mOptionsMenu = new PopupWindow(contentView , LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); contentView.findViewById(R.id.TextView02).setOnClickListener(this); contentView.findViewById(R.id.view1).setOnClickListener(this); 2. 點菜單鍵顯示隱藏菜單,按back鍵隱藏菜單 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_BACK: if (mOptionsMenu.isShowing()) { mOptionsMenu.dismiss(); return false; } break; case KeyEvent.KEYCODE_MENU: if (mOptionsMenu.isShowing()) { mOptionsMenu.dismiss(); } else { mOptionsMenu.showAtLocation(mainLayout, Gravity.BOTTOM, 0, 0); } break; default: break; } return super.onKeyDown(keyCode, event); } 3. 暫停狀態時隱藏菜單 @Override protected void onPause() { super.onPause(); if (mOptionsMenu.isShowing()) { mOptionsMenu.dismiss(); } } 4. 點擊某個菜單項 隱藏菜單 ;點擊菜單和通知欄以外的區域(不會響應點擊事件) @Override public void onClick(View v) { // 不同菜單的點擊事件 switch (v.getId()) { case R.id.TextView02: break; case R.id.view1: break; default: break; } mOptionsMenu.dismiss(); } 5. 佈局文件兩個 activity_main.xml佈局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/selector_btn_refresh" android:layout_alignLeft="@+id/textView1" android:layout_below="@+id/textView1" android:layout_marginTop="37dp" android:text="Button" /> </RelativeLayout> optionsmenu.xml佈局: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:id="@+id/linearLayout1" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#A0F7E6C7" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" > <Button android:id="@+id/TextView02" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/selector_btn_refresh" android:drawableTop="@android:drawable/ic_menu_add" android:gravity="center_horizontal" android:text="設置" android:textAppearance="?android:attr/textAppearanceMedium" /> <Button android:id="@+id/TextView01" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:drawableTop="@android:drawable/ic_menu_add" android:gravity="center_horizontal" android:text="升級" android:textAppearance="?android:attr/textAppearanceMedium" /> <Button android:id="@+id/TextView04" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:drawableTop="@android:drawable/ic_menu_add" android:gravity="center_horizontal" android:text="書籤" android:textAppearance="?android:attr/textAppearanceMedium" /> <Button android:id="@+id/TextView03" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:drawableTop="@android:drawable/ic_menu_add" android:gravity="center_horizontal" android:text="刷新" android:textAppearance="?android:attr/textAppearanceMedium" /> </LinearLayout> <View android:id="@+id/view1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/menus" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" /> </RelativeLayout>