效果图:
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"));