天天看點

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