Add Context Menu Icon in android

前端 未结 5 1078
时光说笑
时光说笑 2020-12-14 19:15

I have a Listview with a ContextMenu, but when I setIcon for ContextMenu look like it doesn\'t work

public void onCreateContextMenu(ContextMenu menu , View v         


        
5条回答
  •  孤城傲影
    2020-12-14 20:05

    I did it by this way:

    Reference screenshot:

    Menu:

    menu_patient_language.xml

    
    
    
        
    
        
    
    
    

    Style:

    style.xml:

      
        
    
      
    
        
    

    Java code:

     private void showPopup(View v) {
    
            Context wrapper = new ContextThemeWrapper(this, R.style.popupMenuStyle);
            PopupMenu mypopupmenu = new PopupMenu(wrapper, v);
    
            setForceShowIcon(mypopupmenu);
            MenuInflater inflater = mypopupmenu.getMenuInflater();
            inflater.inflate(R.menu.menu_patient_language, mypopupmenu.getMenu());
            mypopupmenu.show();
    //        mypopupmenu.getMenu().getItem(0).setIcon(getResources().getDrawable(R.mipmap.ic_launcher));
            mypopupmenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    txtPreferredLanguage.setText(item.getTitle().toString());
                    switch (item.getItemId()) {
                        case R.id.menuEnglish:
                            // Your code goes here
                            break;
    
                        case R.id.menuFrench:
                            // Your code goes here
                            break;
                    }
                    return false;
                }
            });
        }
    
        private void setForceShowIcon(PopupMenu popupMenu) {
            try {
                Field[] mFields = popupMenu.getClass().getDeclaredFields();
                for (Field field : mFields) {
                    if ("mPopup".equals(field.getName())) {
                        field.setAccessible(true);
                        Object menuPopupHelper = field.get(popupMenu);
                        Class popupHelper = Class.forName(menuPopupHelper.getClass().getName());
                        Method mMethods = popupHelper.getMethod("setForceShowIcon", boolean.class);
                        mMethods.invoke(menuPopupHelper, true);
                        break;
                    }
                }
            } catch (Throwable e) {
                e.printStackTrace();
            }
        }
    

    Hope this would help you sure.

    Done

提交回复
热议问题