1. 概述
弹出式菜单是和某个View关联在一起的,Android会根据这个View的位置,自动确定弹出式菜单的显示位置。
创建弹出式菜单的步骤如下:
- PopupMenu popupMenu = new PopupMenu(context, view);
- Menu menu = popupMenu.getMenu();
- popupMenu.getMenuInflater().inflate(resId, menu);
- popupMenu.setOnMenuItemClickListener(xxxxx);
- popupMenu.show();
2. 示例
2.1 Java代码
package com.example.hellopopupmenu;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
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 {
private Button button = null;
private Toast toast = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hello_popup_menu_main);
button = (Button) this.findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showPopupMenu();
}
});
}
private void showPopupMenu() {
PopupMenu popupMenu = new PopupMenu(this, button);
Menu menu = popupMenu.getMenu();
MenuInflater inflater = popupMenu.getMenuInflater();
inflater.inflate(R.menu.popup_menu, menu);
popupMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.item01:
showToast("item01");
return true;
case R.id.item02:
showToast("item02");
return true;
case R.id.item03_01:
showToast("item03_01");
return true;
case R.id.item03_02:
showToast("item03_02");
return true;
default:
return false;
}
}
});
popupMenu.show();
}
private void showToast(String string) {
if (toast == null) {
toast = Toast.makeText(this, "", Toast.LENGTH_SHORT);
}
toast.setText(string);
toast.show();
}
}
2.2 布局文件
<?xml version="1.0" encoding="utf-8"?>
<!-- hello_popup_menu_main.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/button_text"/>
</LinearLayout>
2.3 菜单资源
<?xml version="1.0" encoding="utf-8"?>
<!-- popup_menu.xml -->
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/item01"
android:title="@string/item01"/>
<item
android:id="@+id/item02"
android:title="@string/item02"/>
<item
android:id="@+id/item03"
android:title="@string/item03">
<menu>
<item
android:id="@+id/item03_01"
android:title="@string/item03_01"/>
<item
android:id="@+id/item03_02"
android:title="@string/item03_02"/>
</menu>
</item>
</menu>
2.4 字符串资源
<string name="button_text">Show a PopupMenu</string>
<string name="item01">item01</string>
<string name="item02">item02</string>
<string name="item03">item03</string>
<string name="item03_01">item03_01</string>
<string name="item03_02">item03_02</string>