天天看点

android-popMenu菜单

效果图:

android-popMenu菜单

1.新建header_menu_pop.xml

android-popMenu菜单

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.

android-popMenu菜单

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-popMenu菜单

代码:

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"));