PopupMenu详解

  /**
     * 展示按钮
     * @param menu 你将要演示控件
     */
    @TargetApi(Build.VERSION_CODES.KITKAT)
    private void showPopupMenu(View menu) {
//        View当前PopupMenu显示的相对View的位置
        PopupMenu popupMenu = new PopupMenu(getActivity(), menu);
        Menu menu1 = popupMenu.getMenu();
        // 通过代码添加菜单项
        menu1.add(Menu.NONE, Menu.FIRST + 1, 1, "复制");
        menu1.add(Menu.NONE, Menu.FIRST + 2, 1, "粘贴");
// 通过XML文件添加菜单项,menu布局
        popupMenu.getMenuInflater().inflate(R.menu.activitys, menu1);
        /*方法一:使用反射,强制显示菜单图标*/
//        try {
//            Field field = popupMenu.getClass().getDeclaredField("mPopup");
//            field.setAccessible(true);
//            MenuPopupHelper mHelper = (MenuPopupHelper) field.get(popupMenu);
//            mHelper.setForceShowIcon(true);
//        } catch (NoSuchFieldException | IllegalAccessException e) {
//            e.printStackTrace();
//            Logs.e(tag + "  137");
//        }
//        menu的item点击事件
        popupMenu.setOnMenuItemClickListener(menuItem);
//        PopupMenu关闭事件
        popupMenu.setOnDismissListener(new PopupMenu.OnDismissListener() {
            @Override
            public void onDismiss(PopupMenu menu) {
                Toast.makeText(getActivity(), "关闭PopupMenu", Toast.LENGTH_SHORT).show();
            }
        });
        popupMenu.show();
    }


    /**
     * popmenu的监听
     */
    PopupMenu.OnMenuItemClickListener menuItem = new PopupMenu.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            switch (item.getItemId()) {
                case R.id.menu_one:
                    SmallUtil.getActivity(getActivity(), chartViewActivity.class);
                    break;
                case R.id.menu_two:
                    SmallUtil.getActivity(getActivity(), PickviewActivity.class);
                    break;
                case R.id.menu_three:
                    SmallUtil.getActivity(getActivity(), ChangeLanguageActivity.class);
                    break;
                case R.id.menu_four:
                    DialogLogin dialogLogin = new DialogLogin(getActivity(), new DialogLogin.putDataListener() {
                        @Override
                        public void putData(String user, String psw) {
                            Logs.d("账号:" + user + " " + "密码:" + psw);
                        }
                    });
                    break;
                case R.id.menu_five:
                    DialogAddId idDialog = new DialogAddId(getActivity(), new DialogAddId.putIdListener() {
                        @Override
                        public void putId(String id) {
                            Logs.v("输入的设备ID为:" + id);
                        }
                    });
                    break;
                case Menu.FIRST + 1:
                    ToastUtil.showLong("复制");
                    break;
                case Menu.FIRST + 2:
                    ToastUtil.showLong("粘贴");
            }
            return false;
        }
    };

R.menu.activitys

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/menu_one"
        android:title="圆点变化趋势曲线图" />
    <item
        android:id="@+id/menu_two"
        android:title="滚轮控件" />
    <item
        android:id="@+id/menu_three"
        android:title="切换系统语言" />
    <item
        android:id="@+id/menu_four"
        android:title="登录弹框" />
    <item
        android:id="@+id/menu_five"
        android:title="手动输入设备ID" />

</menu>

 

如果你觉得系统自带的popmenu样式好丑,可以在STYLE里自定义样式

   <!--   +++++++++++++++++++++++      mainActivity的style    ++++++++++++++++++++++++++++++ -->
    <style name="mainStyle" parent="AppTheme">
        <item name="android:popupMenuStyle">@style/popmenuStyle</item>
        <item name="android:dropDownListViewStyle">@style/popmenuDivier</item>
        <item name="android:textAppearanceSmallPopupMenu">@style/popmeuText</item>
        <item name="android:textAppearanceLargePopupMenu">@style/popmeuText</item>
    </style>
    <!--popMenu的Style-->
    <style name="popmenuStyle" parent="@android:style/Widget.PopupMenu">
        <item name="android:popupBackground">@color/black</item><!-- popMenu的背景色-->
    </style>
    <!--popmenu的字体颜色-->
    <style name="popmeuText">
        <item name="android:textColor">@color/white</item>
        <item name="android:textSize">20sp</item>
        <item name="android:gravity">center</item>
    </style>
    <!--popMenu分割线的颜色-->
    <style name="popmenuDivier">
        <item name="android:divider">@color/blueSky</item>
        <item name="android:dividerHeight">2sp</item>
    </style>


    <!-- popwindow的样式 -->
    <style name="PopupAnimation" parent="android:Animation">
        <item name="android:windowEnterAnimation">@anim/popup_enter</item>
        <item name="android:windowExitAnimation">@anim/popup_exit</item>
    </style>

要在相应的Activity里面应用样式

<!-- MENU的效果实现的style添加到所在ACTIVITY里 -->
<activity
    android:name=".MainActivity"
    android:screenOrientation="portrait"
    android:theme="@style/mainStyle" />

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值