android-popMenu菜单

效果图:

1.新建header_menu_pop.xml

2.内容如下:@drawable/XXXXXX是你自己的图片

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@+id/send_qz_chart"
        android:icon="@drawable/send_qz_chart"
        android:title="发起群聊"/>
    <item android:id="@+id/add_friend"
        android:icon="@drawable/add_friend_white"
        android:title="添加好友"/>
    <item android:id="@+id/code"
        android:icon="@drawable/icon_code"
        android:title="扫一扫"/>
</menu>

3.

 

4.代码:

<!--pop菜单-->
<style name="mainStyle" parent="AppTheme">
    <item name="android:dropDownListViewStyle">@style/popmenuDivier</item>
    <item name="android:popupBackground">@color/black</item>
    <item name="android:textColor">@android:color/white</item>
    <item name="android:colorBackground">@color/black</item>
</style>
<!--popMenu分割线的颜色  -->
<style name="popmenuDivier">
    <!--选中颜色-->
    <item name="android:listSelector">@color/black</item>
    <item name="android:divider">@color/header_bg</item>
    <item name="android:dividerHeight">1sp</item>
</style>

5.

 

代码:

android:theme="@style/mainStyle"

7.Activity调用代码

//点击事件
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@OnClick({R.id.search_iv, R.id.add_iv})
public void onClick(View view) {
    Intent intent = new Intent();
    switch (view.getId()) {
        case R.id.search_iv:
            intent.setClass(this.getActivity(), SearchFriendOrQZActivity.class);
            startActivity(intent);
            break;
        case R.id.add_iv:
            //调用方法显示菜单
            showPopupMenu(this.getActivity(), view);
            break;
    }
}
@SuppressLint("RestrictedApi")
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
private void showPopupMenu(final Context context, View ancher) {
    PopupMenu popupMenu = new PopupMenu(context, ancher);
    //引入菜单资源
    popupMenu.inflate(R.menu.header_menu_pop);
    //菜单项的监听
    popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem menuItem) {
            switch (menuItem.getItemId()) {
                case R.id.send_qz_chart:
                    Toast.makeText(context, "send_qz_chart", Toast.LENGTH_SHORT).show();
                    break;
                case R.id.add_friend:
                    Toast.makeText(context, "add_friend", Toast.LENGTH_SHORT).show();
                    break;
                case R.id.code:
                    Toast.makeText(context, "code", Toast.LENGTH_SHORT).show();
                    break;
            }
            return true;
        }
    });
    //使用反射。强制显示菜单图标
    try {
        Field field = popupMenu.getClass().getDeclaredField("mPopup");
        field.setAccessible(true);
        MenuPopupHelper mHelper = (MenuPopupHelper) field.get(popupMenu);
        mHelper.setForceShowIcon(true);
    } catch (IllegalAccessException | NoSuchFieldException e) {
        e.printStackTrace();
    }
    //显示PopupMenu
    popupMenu.show();
}

 

8.可能存在的bug:

其它布局字体颜色会变成白色

解决:

使用java代码进行TextView控件设置颜色:

代码:

tv.setTextColor(Color.parseColor("#000000"));

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

kenadc

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

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

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

打赏作者

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

抵扣说明:

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

余额充值