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