2014/05/07

android Popupmenu example

原本 Listview 我都是使用 context menu, 後來除了使用 context menu 外, 也新增 popupmenu 來彈出選單.
原因是滿多人都不知道長按項目會出現選單.

以下是簡單的 popupmenu example.

兩個按鈕, 一個會啟動另外一個 activity, 另外一個則是簡單的 button, 點擊後會跳出 popupmenu.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="24dp"
    android:orientation="vertical">

    <Button
        android:id="@+id/btn_example"
        android:text="@string/btn_example"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:padding="16dp"/>

    <Button
        android:id="@+id/btn"
        android:text="@string/btn_popupmenu"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:padding="16dp"/>

</LinearLayout>

而在 MainAcivity 裡, Popupmenu 的實作也很簡單.

下面是 button 的 OnClickListener, 透過點擊此 button, 就會產生一個 PopupMenu 出來.
final View.OnClickListener mPopupMenuClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            PopupMenu popmenu = new PopupMenu(MainActivity.this, v);
            popmenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    switch (item.getItemId()) {
                        case 1:
                            Toast.makeText(MainActivity.this, R.string.popupmenu_menu_1, Toast.LENGTH_SHORT).show();
                            return true;
                        case 2:
                            Toast.makeText(MainActivity.this, R.string.popupmenu_menu_2, Toast.LENGTH_SHORT).show();
                            return true;
                        case 3:
                            Toast.makeText(MainActivity.this, R.string.popupmenu_menu_3, Toast.LENGTH_SHORT).show();
                            return true;
                    }
                    return false;
                }
            });


            Menu menu = popmenu.getMenu();
            menu.add(0, 1, 0, R.string.popupmenu_menu_1);
            menu.add(0, 2, 0, R.string.popupmenu_menu_2);
            menu.add(0, 3, 0, R.string.popupmenu_menu_3);

            popmenu.show();
        }
    };

結果就會如下圖.




不過實際上我的應用通常是更常使用在 ListView 的部份.
這邊就不把程式碼貼出來, 有興趣可以下載原始碼觀看.
結果圖如下:



原始碼下載: PopmenuExample.zip