1.简介
PopupMenu如果空间足够,它将显示在定位视图下方,否则显示在其上方。
使用步骤:
- 实例化 PopupMenu 及其构造函数,该函数将提取当前应用的 Context 以及菜单应锚定到的 View。
PopupMenu popup = new PopupMenu(this, view);
- 使用 MenuInflater 将菜单资源扩充到 PopupMenu.getMenu() 返回的 Menu 对象中。
MenuInflater inflater = popup.getMenuInflater(); inflater.inflate(R.menu.pop_menu_demo, popup.getMenu());
- 如果想要设置监听事件,则实现PopupMenu.OnMenuItemClickListener 接口并给相应的 PopupMenu注册。
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.menu_item2:
Toast.makeText(MenuDemoActivity.this, "你点击了item2", Toast.LENGTH_SHORT).show();
case R.id.menu_item1:
Toast.makeText(MenuDemoActivity.this, "你点击了item1", Toast.LENGTH_SHORT).show();
}
return true;
}
});
- 调用 PopupMenu.show()。
popup.show();
例子
创建MenuDemoActivity。
- pop_menu_demo.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_item1"
android:orderInCategory="1"
android:title="item1"/>
<item android:title="item2"
android:orderInCategory="2"
android:id="@+id/menu_item2"/>
</menu>
- activity_menu_demo.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MenuDemoActivity"
android:orientation="vertical"
android:padding="10dp">
<Button
android:id="@+id/btn_pop_menu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="弹出菜单"/>
</LinearLayout>
- MenuDemoActivity.java
package xyz.strasae.androidlearn.my;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.PopupMenu;
import android.widget.Toast;
public class MenuDemoActivity extends AppCompatActivity {
private Button btn_pop_menu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu_demo);
btn_pop_menu = findViewById(R.id.btn_pop_menu);
findViewById(R.id.btn_pop_menu).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showPopup(btn_pop_menu);
}
});
}
public void showPopup(View v) {
PopupMenu popup = new PopupMenu(this, v);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.pop_menu_demo, popup.getMenu());
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.menu_item2:
Toast.makeText(MenuDemoActivity.this, "你点击了item2", Toast.LENGTH_SHORT).show();
case R.id.menu_item1:
Toast.makeText(MenuDemoActivity.this, "你点击了item1", Toast.LENGTH_SHORT).show();
}
return true;
}
});
popup.show();
}
}