Android UI 基礎之 Menu使用大全

Android UI基礎之Menu 的使用

Android中一共有三種類型的菜單,它們分別是

1Options menu and action bar (菜單在標題欄)

2Context menu (上下文菜單)

3Popup menu (彈出式菜單)

Options menu and action bar 的實現如下:

效果圖如下:

 

點擊生成圖標效果如下:

 

對於menu的定義一共有兩種方式,分別爲xml 註冊與代碼註冊

 

代碼註冊如下:

1: 創建ActivityonCreateOptionMenu Menu menu) 方法,當菜單第一次被第一次打開時調用

2:調用Menu add ()方法添加菜單項(MenuItem),同時可以調用MenuItemSetIcon ()方法來爲菜單項設置圖標。

3:當菜單項 (MenuItem )被選擇時,覆蓋ActivitynOptionsItemSelected(MenuItem item) 來響應事件。

public boolean onCreateOptionsMenu(Menu menu) {
//        //  添加菜單項參數分別爲(組ID , 當前選項ID, 排序, 標題)
        menu.add(0, 100, 1, "設置");// 返回值爲menuItem
        menu.add(0, 200, 2, "開始遊戲");
        menu.add(0, 300, 3, "退出遊戲");
        return super.onCreateOptionsMenu(menu);
    }
    // 菜單選項的單擊事件
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        //onCreateOptionsMenu方法中,如果單擊那個 menuItem則返回其對應的ItemId
        int id = item.getItemId();// 返回當前對應的Itemid
        switch (id) {
            case 100://表示在戲設置中選項中進行的操作,此處爲實現代碼
                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setTitle("請選擇一個平臺使用");
                final String[] items = {"Android", "ios", "Wp"};
                builder.setItems(items, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.this, items[which], Toast.LENGTH_SHORT).show();
                    }
                });
                builder.show();
                break;
            case 200:
                Toast.makeText(MainActivity.this, "正在啓動遊戲界面。。。", Toast.LENGTH_SHORT).show();
                break;
            case 300:
                Toast.makeText(MainActivity.this, "正在關閉遊戲。。。。。", Toast.LENGTH_SHORT).show();
                break;
       }
        return super.onOptionsItemSelected(item);
    }
}

Xml 文件註冊與上基本類似

效果如下:

 

實現過程如下:

需要在res/ menu 文件夾下創建文件

main_mian2.xml 用來添加菜單的每一項佈局 如下:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity">
    <item
        android:id="@+id/game_start"
        android:orderInCategory="300"
        android:title="開始遊戲"
        app:showAsAction="ifRoom"
        android:icon="@android:drawable/ic_menu_edit"
        />
    <item
        android:id="@+id/game_exit"
        android:orderInCategory="200"
        android:title="退出遊戲"
        app:showAsAction="ifRoom"
        android:icon="@android:drawable/ic_menu_camera"
        />
      />
    <item
        android:id="@+id/game_set"
        android:orderInCategory="100"
        android:title="遊戲設置"
        app:showAsAction="ifRoom"
        android:icon="@android:drawable/ic_menu_search"
        />
         />
</menu>

MianActivity 文件中將使用getMenuInflater().inflate(R.menu.mian_main2,menu); 將資源問件加載出來即可。

完整代碼如下:

public class MainActivity extends ActionBarActivity
{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    // 用於創建選項項菜單的事件方式,在打開界面的時時候會被自動調用
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.mian_main2,menu);
        return super.onCreateOptionsMenu(menu);
    }

    // 菜單選項的單擊事件
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        //onCreateOptionsMenu方法中,如果單擊那個 menuItem則返回其對應的ItemId
        int id = item.getItemId();// 返回當前對應的Itemid
        switch (id) {
            // ----------------------------------xml文件註冊---------------------
          case R.id.game_start:
              AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setTitle("請選擇一個平臺使用");
                final String[] items = {"Android", "ios", "Wp"};
                builder.setItems(items, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.this, items[which], Toast.LENGTH_SHORT).show();
                    }
                });
                builder.show();
                break;
         case R.id.game_exit:
            Toast.makeText(MainActivity.this, "正在啓動遊戲界面。。。", Toast.LENGTH_SHORT).show();
            break;
            case R.id.game_set:
                Toast.makeText(MainActivity.this, "設置遊戲。。。", Toast.LENGTH_SHORT).show();
       }
        return super.onOptionsItemSelected(item);
    }
}

ContextMenu的使用

ContextView,與上下文環境有關,思想類似於Windows 中的右擊單擊建彈出的快捷菜單,操作是長時間按住某個組件不放

效果如下:

 

長時間按住如下:

 

創建步驟如下:

1覆蓋Activity的 onCreateContextMenu ()方法,調用Menu add ()方法添加菜單項

2:覆蓋ActivityonContextItemSelected(MenuItem item) 來響應事件。

3:調用registForContextMenu ()方法來爲視圖註冊上下文菜單。

注意:一個界面只能使用一個ContenxtMenu

ContextMenu也有兩種註冊方式。

Xml 註冊方式實現過程如下:

res/menu 文件夾下創建 context_menu.xml文件

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity">
    <item
        android:id="@+id/red"
        android:orderInCategory="100"
        android:title="紅色" />
    <item
        android:id="@+id/green"
        android:orderInCategory="200"
        android:title="綠色" />
    <item
        android:id="@+id/blue"
        android:orderInCategory="300"
        android:title="藍色" />
</menu>

MianActivity文件中加載佈局文件。

package com.xiyou.com.meanususe;

import android.graphics.Color;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;

//上下文菜單
public class ContextMenuus extends AppCompatActivity {
    private TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.context_menu);
               // 註冊上下文菜單到TextView組件上
        registerForContextMenu(tv);
    }

    // 創建上下文菜單的事件方法
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        getMenuInflater().inflate(R.menu.context_menu, menu);
        super.onCreateContextMenu(menu, v, menuInfo);
    }

    // 上下文菜單的單擊事件
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.red:
                tv.setBackgroundColor(Color.RED);
                break;
            case R.id.green:
                tv.setBackgroundColor(Color.GREEN);
                break;
            case R.id.blue:
                tv.setBackgroundColor(Color.BLUE);
                break;
        }
        return super.onContextItemSelected(item);
    }
}

PopupMenu 的使用

 彈出式菜單是停靠在View上的一個模式菜單,如果View對象的下方有空間,那麼彈出菜單將顯示在停靠對象的下方,否則會顯示在上方,這個組件非常有用。

注意:彈出式菜單是在API 11 或更高版本上纔有效的

效果圖如下:

 

實現過程如下:

實現過程如下:

需要在res/ menu 文件夾下創建文件

poup_menu.xml 用來添加菜單的每一項佈局 如下:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity">
    <item
        android:id="@+id/s"
        android:orderInCategory="100"
        android:title="S" />
    <item
        android:id="@+id/m"
        android:orderInCategory="200"
        android:title="M" />
    <item
        android:id="@+id/l"
        android:orderInCategory="300"
        android:title="L" />
</menu>

 在MainActivity中加載菜單項,並且添加監聽事件

/*
彈出式菜單
在實現OnMenuItemClickListener方法時應該實現PopupMenu中的方法
 */
public class Poupmenu_use extends AppCompatActivity implements PopupMenu.OnMenuItemClickListener {
    private Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_poupmenu_use);
    }
    public void TypeSize_Click(View view) {
        PopupMenu popupMenu = new PopupMenu(this, view);
        MenuInflater inflater = popupMenu.getMenuInflater();
        inflater.inflate(R.menu.poup_menu, popupMenu.getMenu());
        //  彈出式菜單的選項單擊事件
        popupMenu.setOnMenuItemClickListener(this);
        popupMenu.show();
    }
    @Override
    public boolean onMenuItemClick(MenuItem item) {
                String s = (String) item.getTitle();// 獲取MenuItem上的內容
        switch (item.getItemId()) {
            case R.id.s:
                Toast.makeText(Poupmenu_use.this, "你選擇的是S"+s, Toast.LENGTH_SHORT).show();
                break;
            case R.id.m:
                Toast.makeText(Poupmenu_use.this, "你選擇的是M", Toast.LENGTH_SHORT).show();
                break;
            case R.id.l:
                Toast.makeText(Poupmenu_use.this, "你選擇的是L", Toast.LENGTH_SHORT).show();
                break;
        }
        return true;
    }
}

 

 

 

 

 

 

 

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