PopupMenu,彈出菜單,一個模態形式展現的彈出風格的菜單,綁在在某個View上,通常出如今被綁定的View的下方(若是下方有空間)。java
注意:彈出菜單是在API 11和更高版本上纔有效的。android
核心步驟:app
(1)經過PopupMenu的構造函數實例化一個PopupMenu對象,須要傳遞一個當前上下文對象以及綁定的View。ide
(2)調用PopupMenu.setOnMenuItemClickListener()設置一個PopupMenu選項的選中事件。函數
(3)使用MenuInflater.inflate()方法加載一個XML文件到PopupMenu.getMenu()中。佈局
(4)在須要的時候調用PopupMenu.show()方法顯示。this
如今經過代碼來實現。從新新建一個工程文件MenuTest03。步驟以下:spa
先在佈局文件activity_main.xml中加一個按鈕,代碼略。code
(1)在res/menu/main.xml中定義菜單項。main.xml的代碼以下:xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/exit" android:title="退出"/>
<item android:id="@+id/set" android:title="設置"/>
<item android:id="@+id/account" android:title="帳號"/>
</menu>
(2)MainActivity.java:
package com.example.menutest03; import android.app.Activity;import android.os.Bundle; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.PopupMenu; import android.widget.PopupMenu.OnMenuItemClickListener; import android.widget.Toast; public class MainActivity extends Activity implements OnClickListener,OnMenuItemClickListener{ private Button button1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button1 = (Button)findViewById(R.id.button1); button1.setOnClickListener(this); } //點擊按鈕後,加載彈出式菜單
@Override public void onClick(View v) { //建立彈出式菜單對象(最低版本11)
PopupMenu popup = new PopupMenu(this, v);//第二個參數是綁定的那個view //獲取菜單填充器
MenuInflater inflater = popup.getMenuInflater(); //填充菜單
inflater.inflate(R.menu.main, popup.getMenu()); //綁定菜單項的點擊事件
popup.setOnMenuItemClickListener(this); //顯示(這一行代碼不要忘記了)
popup.show(); } //彈出式菜單的單擊事件處理
@Override public boolean onMenuItemClick(MenuItem item) { // TODO Auto-generated method stub
switch (item.getItemId()) { case R.id.exit: Toast.makeText(this, "退出", Toast.LENGTH_SHORT).show(); break; case R.id.set: Toast.makeText(this, "設置", Toast.LENGTH_SHORT).show(); break; case R.id.account: Toast.makeText(this, "帳號", Toast.LENGTH_SHORT).show(); break; default: break; } return false; } }
注意代碼綁定了兩個監聽器:OnClickListener和OnMenuItemClickListener。 在綁定OnMenuItemClickListener監聽器時,選的是下面這個:
效果以下:
更多技術乾貨,歡迎關注個人公衆號:ChaoYoung