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這裏面是功能菜單關閉後執行的。(選擇功能後關閉,或者直接關閉).

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

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