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