安卓中菜單的使用

OptionsMenu

OptionsMenu創建方式

1.菜單資源

Menu菜單的屬性:
showAsAction 屬性共有五個值:ifRoom、never、always、withText、collapseActionView,可以混合使用。

  • ifRoom
    會顯示在 Item 中,但是如果已經有4個或者4個以上的Item時會隱藏在溢出列表中。當然個數並不僅僅侷限於4個,依據屏幕的寬窄而定
  • never
    永遠不會顯示。只會在溢出列表中顯示,而且只顯示標題,所以在定義 item 的時候,最好把標題都帶上。
  • always
    無論是否溢出,總會顯示。
  • withText
    withText值示意 Action bar 要顯示文本標題。Action bar 會盡可能的顯示這個標題,但是,如果圖標有效並且受到 Action bar 空間的限制,文本標題有可能顯示不全。
  • collapseActionView 一般結合 ifRoom 實現 SearchView 的效果。

命名空間使用app的否則報錯。因爲當前是V7包的AppCompatActivity
app:showAsAction=”always”

語法(SYNTAX):

<?xml version="1.0" encoding="utf-8"?>
<menuxmlns:android="http://schemas.android.com/apk/res/android">
    <itemandroid:id="@[+][package:]id/resource_name"
          android:title="string"
          android:titleCondensed="string"
          android:icon="@[package:]drawable/drawable_resource_name"
          android:onClick="method name"
          android:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]
          android:actionLayout="@[package:]layout/layout_resource_name"
          android:actionViewClass="class name"
          android:actionProviderClass="class name"
          android:alphabeticShortcut="string"
          android:numericShortcut="string"
          android:checkable=["true" | "false"]
          android:visible=["true" | "false"]
          android:enabled=["true" | "false"]
          android:menuCategory=["container" | "system" | "secondary" | "alternative"]
          android:orderInCategory="integer"/>
    <groupandroid:id="@[+][package:]id/resource name"
           android:checkableBehavior=["none" | "all" | "single"]
           android:visible=["true" | "false"]
           android:enabled=["true" | "false"]
           android:menuCategory=["container" | "system" | "secondary" | "alternative"]
           android:orderInCategory="integer">
        <item/>
    </group>
    <item>
        <menu>
          <item/>
        </menu>
    </item>
</menu>

2.java代碼

//在Activity 中重寫該方法 用於創建 OptionMenu。

注意: 官方文檔明確說明,該方法必須返回 true 纔會創建菜單。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    //菜單加載器加載菜單資源
    getMenuInflater().inflate(R.menu.main,menu);
    //java代碼動態添加菜單項
    menu.add(Menu.NONE,123,0,"系統設置");
    return true;
}

菜單項點擊事件 onOptionsItemSelected()

//選項菜單 Item 的選擇時間回調方法
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_add:
            Toast.makeText(this, "action_add", Toast.LENGTH_SHORT).show();
            break;
        default:
            break;
    }
    return super.onOptionsItemSelected(item);
}

onMenuItemSelected()

該方法是 Activity 的方法。 通用的菜單點擊事件回調函數。內部會根據菜單的類型,去調用 onOptionsItemSelected()方法。以及 onContextItemSelected()方法等。

ContextMenu

ContextMenu創建方式

在Activity 中重寫該方法來創建 ContextMenu;具體與 OptionsMenu 類似

onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)

注意: 上下文菜單可以設置以下屬性。

menu.setHeaderIcon(R.drawable.ic_launcher);//設置上下文的圖標
menu.setHeaderTitle(“提示!”);//設置上下文的頭部標題
menu.setHeaderView(view)//設置上下文的頭部 View

上下文菜單項點擊事件

在 Activity 中重寫該方法 來獲取上下文的點擊事件回調
onContextItemSelected//獲取上下文點擊事件

提示: 如果是 ListView 等列表控件註冊了上下文菜單,則得到長按的 Item 的位置可以通過以下代碼來獲取:

AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
int position = menuInfo.position;

上下文菜單綁定註冊

通過以下方法來爲某一個控件 註冊上下文菜單。

registerForContextMenu(view);//註冊激活上下文菜單的組件

(注意:彈出上下文菜單是長按該組件)

PopupMenu

PopupMenu的創建

PopupMenu popupMenu = new PopupMenu(this, view);//創建 Popup 菜單
//加載 資源菜單 到 PopupMenu
getMenuInflater().inflate(R.menu.my_menu, popupMenu.getMenu());
            popupMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {

                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    Toast.makeText(MainActivity.this, item.getItemId(), Toast.LENGTH_LONG).show();
                    return true;
                }
            });
            popupMenu.show();

popupMenu.setOnDismissListener//菜單關閉監聽
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章