弹出菜单
弹出菜单被固定在调用菜单的视图元素上,并且在一个垂直列表中显示菜单项目
- 弹出菜单是在API级别11和更高版本上才有效。
- 弹出菜单是一个视图元素上弹出的模式菜单
- 如果这个视图元素下方有空间,那么弹出菜单将显示在视图元素的下方,否则会显示在上方。
弹出菜单设计步骤
-
编写Menu配置文件
<menu 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" tools:context="com.example.popupmenudemo.MainActivity"> <item android:id="@+id/copy" android:orderInCategory="100" android:title="@string/copy" /> <item android:id="@+id/past" android:orderInCategory="100" android:title="@string/past" /> </menu>
-
加载PopupMenu
-
通过PopupMenu的构造函数实例化一个PopupMenu对象,传递一个当前上下文对象以及绑定的View控件
/*构建弹出菜单对象,第二个参数表明绑定那个view*/ PopupMenu pm = new PopupMenu(MainActivity.this,view);
-
使用menulnflater.infllate()方法加载配置文件到PopupMenu.getMenu()
/*表明要填充的内容菜单*/ pm.inflate(R.menu.menu_main);
-
在需要的时候调用PopupMenu.shou()方法
/*弹出菜单显示出来*/ pm.show();
- 调用PopupMenu.setOnMenultemClickListener()设置一个PopupMenu选项的选中事件
pm.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
switch (menuItem.getItemId()){
case R.id.copy:
Toast.makeText(MainActivity.this,"copy",Toast.LENGTH_LONG).show();
break;
case R.id.past:
Toast.makeText(MainActivity.this,"past",Toast.LENGTH_LONG).show();
break;
}
return false;
}
});
整个java文件实现源码
public class MainActivity extends AppCompatActivity{
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
button = findViewById(R.id.mybtn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
/*构建弹出菜单对象,第二个参数表明绑定那个view*/
PopupMenu pm = new PopupMenu(MainActivity.this,view);
/*表明要填充的内容菜单*/
pm.inflate(R.menu.menu_main);
/*绑定菜单项的点击事件处理*/
pm.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
switch (menuItem.getItemId()){
case R.id.copy:
Toast.makeText(MainActivity.this,"copy",Toast.LENGTH_LONG).show();
break;
case R.id.past:
Toast.makeText(MainActivity.this,"past",Toast.LENGTH_LONG).show();
break;
}
return false;
}
});
/*弹出菜单显示出来*/
pm.show();
}
});
}
}