1. 程式人生 > >Android學習(八)—— Android選單

Android學習(八)—— Android選單

Android  選單

我們繼續來進行學習,今天寫一下在軟體中用的還算較多的選單。

1、Menu

選單,很顯然,作用就是點選不同的選項觸發不同的方法。現在在安卓使用中推薦使用ActionBar,但這裡我們還是對選單進行一個簡單的解釋。

選單主要分為三類,選項選單(Option Menu)、上下文選單(Context Menu)和子選單(Sub Menu),下面我們就一個一個來看一下。

(1)選項選單

當用戶單擊軟體上的選單按鈕,觸發事件彈出的選單框就是選項選單。

這是效果圖

先是佈局程式碼

佈局為在res資料夾下新建一個menu資料夾,在此資料夾下建xml檔案。

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <menu xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:app="http://schemas.android.com/apk/res-auto">
 4     <item
 5         android:id="@+id/mune_enter"
 6         android:orderInCategory="100"
 7         android:title="選項一"
8 app:showAsAction="never"/> 9 <item 10 android:id="@+id/mune_setting" 11 android:orderInCategory="100" 12 android:title="選項二" 13 app:showAsAction="never"/> 14 <item 15 android:id="@+id/mune_out" 16 android:orderInCategory="100" 17
android:title="選項三" 18 app:showAsAction="never"/> 19 </menu>

解釋一下其中一些屬性

  • showAsAction 主要是針對這個選單的顯示起作用的,它有三個可選項
  1. always:總是顯示在介面上
  2. never:不顯示在介面上,只讓出現在右邊的三個點中
  3. ifRoom:如果有位置才顯示,不然就出現在右邊的三個點中

下面是java程式碼

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    //匯入選單佈局
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    //這裡是點選選單項的觸發事件
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.mune_enter:
                Toast.makeText(this, "點選選項一", Toast.LENGTH_SHORT).show();
                break;
            case R.id.mune_setting:
                Toast.makeText(this, "點選選項二", Toast.LENGTH_SHORT).show();

                break;
            case R.id.mune_out:
                Toast.makeText(this, "點選選項三", Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        }
        return super.onOptionsItemSelected(item);
    }

}

(2)上下文選單

 當用戶長按Activity頁面時,彈出的選單被稱為上下文選單。一般情況下ContextMenu常用於ListView或者GridView。

效果圖

先是佈局檔案

這裡的佈局就是下載layout中,父佈局為FrameLayout

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:id="@+id/container"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent">
 6 
 7     <ListView
 8         android:id="@+id/mune_list"
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content" >
11     </ListView>
12 
13 </FrameLayout>

這裡沒什麼要說的,直接看下面。

java程式碼

public class MainActivity extends AppCompatActivity {

    private ListView listview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //載入資料
        showListView();
        // 註冊上下文選單
        this.registerForContextMenu(listview);
    }
    //載入資料
    private void showListView() {
        listview = (ListView) findViewById(R.id.mune_list);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, getDate());
        listview.setAdapter(adapter);
    }
    //建立資料來源
    private ArrayList<String> getDate() {
        ArrayList<String> list = new ArrayList<String>();
        for (int i = 0; i < 10; i++) {
            list.add("選單" + i);
        }
        return list;
    }
    //新增上下文選單的選單項
    public void onCreateContextMenu(ContextMenu menu, View v,
                                    ContextMenu.ContextMenuInfo menuInfo) {
        menu.setHeaderTitle("上下文選單");
        //載入上下文選單內容
        menu.add(1, 1, 1, "選項一");
        menu.add(1, 2, 1, "選項二");
        menu.add(1, 3, 1, "選項三");
        super.onCreateContextMenu(menu, v, menuInfo);
    }
    //建立單擊事件
    public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case 1:
                Toast.makeText(this, "點選選項一", Toast.LENGTH_SHORT).show();
                break;
            case 2:
                Toast.makeText(this, "點選選項二", Toast.LENGTH_SHORT).show();
                break;
            case 3:
                Toast.makeText(this, "點選選項三", Toast.LENGTH_SHORT).show();
                break;

            default:
                break;
        }
        return super.onContextItemSelected(item);
    }
}

 (3)子選單

它就是將功能相同的操作進行分組顯示,作用在選項選單上,是選項選單的二級選單

效果圖

先上佈局檔案

其實佈局檔案中可以什麼都沒有

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:id="@+id/container"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent">
 6 
 7     <TextView
 8         android:layout_width="wrap_content"
 9         android:layout_height="wrap_content"
10         android:text="SubMenu"
11         android:textSize="20dp" />
12 
13 </FrameLayout>

然後是java程式碼

 1 public class MainActivity extends AppCompatActivity {
 2 
 3     @Override
 4     protected void onCreate(Bundle savedInstanceState) {
 5         super.onCreate(savedInstanceState);
 6         setContentView(R.layout.activity_main);
 7     }
 8     @Override
 9     public boolean onCreateOptionsMenu(Menu menu) {
10         SubMenu fileMenu = menu.addSubMenu("檢視");
11         SubMenu editMenu = menu.addSubMenu("輸入");
12         //新增選單項
13         fileMenu.add(1, 1, 1, "檢視1");
14         fileMenu.add(1, 2, 1, "檢視2");
15         fileMenu.add(1, 3, 1, "檢視3");
16         editMenu.add(2, 1, 1, "輸入1");
17         editMenu.add(2, 2, 1, "輸入2");
18         editMenu.add(2, 3, 1, "輸入3");
19         return super.onCreateOptionsMenu(menu);
20     }
21     //建立點選事件
22     public boolean onOptionsItemSelected(MenuItem item) {
23         if (item.getGroupId() == 1) {
24             switch (item.getItemId()) {
25                 case 1:
26                     Toast.makeText(this, "點選了檢視1", Toast.LENGTH_SHORT).show();
27                     break;
28                 case 2:
29                     Toast.makeText(this, "點選了檢視2", Toast.LENGTH_SHORT).show();
30                     break;
31                 case 3:
32                     Toast.makeText(this, "點選了檢視3", Toast.LENGTH_SHORT).show();
33                     break;
34                 default:
35                     break;
36             }
37         } else if (item.getGroupId() == 2) {
38             switch (item.getItemId()) {
39                 case 1:
40                     Toast.makeText(this, "點選了輸入1", Toast.LENGTH_SHORT).show();
41                     break;
42                 case 2:
43                     Toast.makeText(this, "點選了輸入2", Toast.LENGTH_SHORT).show();
44                     break;
45                 case 3:
46                     Toast.makeText(this, "點選了輸入3", Toast.LENGTH_SHORT).show();
47                     break;
48                 default:
49                     break;
50             }
51         }
52         return super.onOptionsItemSelected(item);
53     }
54 }

 

上面就是選單的用法了。。。。。。。

說一下ContextMenu與OptionMenu的區別:

  • 1、OptionMenu對應的是activity,一個activity只能擁有一個選項選單;
  • 2、ContextMenu對應的是view,每個view都可以設定上下文選單;

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~