Ich habe ein benutzerdefiniertes Popup-Menü mit einem Symbol für eine meiner Android-Apps implementiert. Hier setze ich das Icon auch angewendet setForceShowIcon
. Hier ist der folgende CodeBenutzerdefiniertes PopUp-Menüsymbol wird bei der Verwendung von Proguard nicht angezeigt
final PopupMenu popupMenu = new PopupMenu(mContext, shareFeed);
popupMenu.inflate(R.menu.custom_share_menu);
Object menuHelper;
Class[] argTypes;
Field fMenuHelper = null;
try {
fMenuHelper = PopupMenu.class.getDeclaredField("mPopup");
fMenuHelper.setAccessible(true);
menuHelper = fMenuHelper.get(popupMenu);
argTypes = new Class[]{boolean.class};
menuHelper.getClass().getDeclaredMethod("setForceShowIcon", argTypes).invoke(menuHelper, true);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
final String des = map.get("title") + "\n" + map.get("description");
final String message = Html.fromHtml(des).toString() + "\n" + mContext.getResources().getString(R.string.app_url);
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.whatsapp:
if (PerformCommonOps.internetConnection(mContext))
PerformCommonOps.shareFeedsOnWhatsapp(mContext, message);
else
Snackbar.make(coordinatorLayout, "Please ensure you have a working internet connection", Snackbar.LENGTH_SHORT).show();
return true;
case R.id.facebook:
if (PerformCommonOps.internetConnection(mContext))
PerformCommonOps.shareToFacebbok(mContext, mContext.getResources().getString(R.string.app_url), view, (Activity) mContext);
else
Snackbar.make(coordinatorLayout, "Please ensure you have a working internet connection", Snackbar.LENGTH_SHORT).show();
return true;
case R.id.text:
if (PerformCommonOps.internetConnection(mContext))
PerformCommonOps.sendText(mContext, message);
else
Snackbar.make(coordinatorLayout, "Please ensure you have a working internet connection", Snackbar.LENGTH_SHORT).show();
return true;
case R.id.googleplus:
if (PerformCommonOps.internetConnection(mContext))
PerformCommonOps.shareOnGooglePlus(mContext, Html.fromHtml(des).toString(), mContext.getResources().getString(R.string.app_url), view);
else
Snackbar.make(coordinatorLayout, "Please ensure you have a working internet connection", Snackbar.LENGTH_SHORT).show();
return true;
default:
common();
return true;
}
}
});
popupMenu.show();
Das Symbol angezeigt wird, wenn ich die App in Debug-Modus läuft aber in Release-Modus mit Proguard das Symbol nicht angezeigt wird. Hier ist meine proguard Konfiguration für setForceShowIcon
######################################
####### POPUpMenu configurations######
######################################
-keepclassmembernames class android.support.v7.widget.PopupMenu { private android.support.v7.internal.view.menu.MenuPopupHelper mPopup; }
-keepclassmembernames class android.support.v7.internal.view.menu.MenuPopupHelper { public void setForceShowIcon(boolean); }
Bitte lassen Sie mich wissen, wo &, was ich falsch mache. TIA
Haben Sie dieses Problem lösen? Ich vermute zu stark, wie in der Antwort unten erklärt, dies bezieht sich auf Progard Einstellung. Aber nicht sicher, welche Klasse genau ich angeben soll. – Atul
Das gleiche hier konnte keine legitime Lösung finden – silverFoxA