Android_ 弹出菜单创建

本文介绍了如何在Android API级别11及以上版本创建弹出菜单。弹出菜单是一个显示在视图元素上的模式菜单,根据空间情况选择下方或上方显示。文章详细阐述了弹出菜单的设计步骤,包括编写Menu配置文件、加载PopupMenu、设置点击事件等,并提供了完整的Java源码实现。

弹出菜单

如果你的梦想,是拯救苍生,那我的梦想,便唯你一人。 --天官赐福

​ 弹出菜单被固定在调用菜单的视图元素上,并且在一个垂直列表中显示菜单项目

  • 弹出菜单是在API级别11和更高版本上才有效。
  • 弹出菜单是一个视图元素上弹出的模式菜单
  • 如果这个视图元素下方有空间,那么弹出菜单将显示在视图元素的下方,否则会显示在上方。

弹出菜单设计步骤

  1. 编写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>
    
  2. 加载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();
    
  1. 调用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();
            }
        });
    }

}
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ColdKite_鸢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值