1. 程式人生 > >Android 實現點擊出現選擇框,或者長按顯示選擇介面,PopupMenu的簡單使用。

Android 實現點擊出現選擇框,或者長按顯示選擇介面,PopupMenu的簡單使用。

這篇文章是我學習過程中遇到的一個比較簡單的,但是卻經常用到的知識點,例如ListView Item長按的選擇功能,或者是點選一個按鈕彈出一個小型的功能選擇介面。類似於這樣一個功能
其實呢,這個是通過一個PopupMenu來實現,來現在我們先看看程式碼,首先我們需要在 res目錄下的menu目錄下建立一個xml檔案,如果res目錄下沒有menu目錄,則新建一個目錄為menu則好,然後建立一個xml檔案。
main_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
>
<item android:id="@+id/add_item" android:title="Add" ></item> <item android:id="@+id/delete_item" android:title="Delete" ></item> </menu>

這裡面的Item就是有多少個功能選項和它的名字。

然後我們看一下activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_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="com.example.administrator.learnmenu.MainActivity">
<Button android:id="@+id/btn_popMenu" android:textAllCaps="false" android:text="Popmenu" android:layout_width="match_parent" android:layout_height="wrap_content" /> </RelativeLayout>

這裡面我們就放置了一個button用於點選後彈出功能選項選單。

然後就是最主要的程式碼來實現主要功能了。

MainActivity


public class MainActivity extends AppCompatActivity {
    Button btn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        btn = (Button) findViewById(R.id.btn_popMenu);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showPopMenu(view);
            }
        });
    }
    public void showPopMenu(View view){
        PopupMenu menu = new PopupMenu(this,view);
        menu.getMenuInflater().inflate(R.menu.main_menu,menu.getMenu());
        menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                switch (item.getItemId()){
                    case R.id.add_item:
                        Toast.makeText(MainActivity.this, "Add selected", Toast.LENGTH_SHORT).show();
                        break;

                    case R.id.delete_item:
                        Toast.makeText(MainActivity.this, "Delete Selected", Toast.LENGTH_SHORT).show();
                        break;

                }
                return true;
            }
        });
        menu.setOnDismissListener(new PopupMenu.OnDismissListener() {
            @Override
            public void onDismiss(PopupMenu menu) {
                Toast.makeText(MainActivity.this, "關閉了", Toast.LENGTH_SHORT).show();
            }
        });
        menu.show();
    }


}

我們來看看核心程式碼部分。

showpopMenu這個函式

 public void showPopMenu(View view){
        PopupMenu menu = new PopupMenu(this,view);
        menu.getMenuInflater().inflate(R.menu.main_menu,menu.getMenu());
        menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                switch (item.getItemId()){
                    case R.id.add_item:
                        Toast.makeText(MainActivity.this, "Add selected", Toast.LENGTH_SHORT).show();
                        break;

                    case R.id.delete_item:
                        Toast.makeText(MainActivity.this, "Delete Selected", Toast.LENGTH_SHORT).show();
                        break;

                }
                return true;
            }
        });
        menu.setOnDismissListener(new PopupMenu.OnDismissListener() {
            @Override
            public void onDismiss(PopupMenu menu) {
                Toast.makeText(MainActivity.this, "關閉了", Toast.LENGTH_SHORT).show();
            }
        });
        menu.show();
    }

在這裡面,我們通過傳入View來 PopupMenu menu。得到這個menu物件後就可以實現功能了,設定監聽,通過判斷點選的item id 來確定點選的是哪裡然後做相應的功能。

menu.getMenuInflater().inflate(R.menu.main_menu,menu.getMenu());

這裡則是獲取到了我們最開始寫好的那個menu.xml.然後 menu.setOnDismissListener這裡面是功能選單關閉後執行的。(選擇功能後關閉,或者直接關閉).

這就是我學習過程中的整體收穫,可能有很多理解有誤或者不是太清楚的地方,僅僅作為一個學習過程的記錄。