¿Cómo ocultar el icono de acciones compartidas (que usan la mayoría) cerca del proveedor de acciones compartidas?

Mira la foto. ¿Cómo puedo ocultar el ícono “P” que significa compartir en Pinterest?

enter image description here

Ambos están en la barra de acción y yo uso ActionBarSherlock.

Si desea mantener todo el modelo de datos del historial de recursos compartidos , simplemente no desea el icom adicional de “actividad compartida predeterminada”. La respuesta en ¿Cómo desactivas el historial de uso compartido cuando utilizas ShareActionProvider? No es suficientemente bueno.

Lo que debes hacer es:

  • Copie estas clases de ActionBarSherlock a su código de proyecto
    • ShareActionProvider.java
    • ActivityChooserView.java
  • En su clase ShareActionProvider.java, importe ActivityChooserView.java que acaba de copiar en lugar de la ubicación del archivo ActionBarShelock
  • En el ActivityChooserView.java –
    • encuentra la línea if (activityCount > 0 && historySize > 0)
    • reemplace esta línea con if (false) (es bastante feo, pero es la solución más rápida. Puede profundizar en el código para eliminar todas las instancias de implementación de DefaultActivity)

Editar: No te olvides de configurar el nuevo ActionProvider en tu elemento de menú, desde XML se vería así: android:actionProviderClass="com.*.CustomShareActionProvider"

¡Eso es!

Encontré una manera de evitar esto. Estoy usando la biblioteca de soporte 23.0.1, no he probado esto en otras versiones de la biblioteca de soporte.

La solución es fácil, cuando crea ShareActionProvider, simplemente anule el método onCreateActionView () y devuelva null para él. Luego puede rastrear todo el historial en el menú emergente, pero el historial no se mostrará en la barra de herramientas.

Aquí hay una muestra de código:

 @Override public boolean onCreateOptionsMenu(Menu menu) { MenuItem item = menu.add(Menu.NONE, R.id.menu_share, Menu.NONE, R.string.share); item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); mShareActionProvider = new ShareActionProvider(this) { @Override public View onCreateActionView() { return null; } }; item.setIcon(R.drawable.abc_ic_menu_share_mtrl_alpha); MenuItemCompat.setActionProvider(item, mShareActionProvider); return true; } 

Actualmente no he encontrado ningún problema al utilizar este trabajo.

Basado en la respuesta de Sean, creé las clases necesarias, puedes copiarlas en tu proyecto ( https://gist.github.com/saulpower/10557956 ). Esto no solo agrega la capacidad de desactivar el historial, sino también de filtrar las aplicaciones con las que le gustaría compartir (si conoce el nombre del paquete).

 private final String[] INTENT_FILTER = new String[] { "com.twitter.android", "com.facebook.katana" }; @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.journal_entry_menu, menu); // Set up ShareActionProvider's default share intent MenuItem shareItem = menu.findItem(R.id.action_share); if (shareItem instanceof SupportMenuItem) { mShareActionProvider = new ShareActionProvider(this); mShareActionProvider.setShareIntent(ShareUtils.share(mJournalEntry)); mShareActionProvider.setIntentFilter(Arrays.asList(INTENT_FILTER)); mShareActionProvider.setShowHistory(false); ((SupportMenuItem) shareItem).setSupportActionProvider(mShareActionProvider); } return super.onCreateOptionsMenu(menu); }