Icono personalizado de Android ShareActionProvider?
Estoy utilizando un ShareActionProvider, pero quiero personalizar el icono (quiero cambiar el color, porque en la actualidad, es blanco).
Estoy usando este código:
- Actualizar texto de ShareActionProvider
- Obtener imagen uri de picasso?
- Sólo cuatro opciones para ShareActionProvider con ActionBarSherlock
- ¿Cómo desactivas el historial de acciones cuando usas ShareActionProvider?
- Android ShareActionProvider funciona en el modo de depuración pero no en el dispositivo real
mShareActionProvider = (ShareActionProvider) item.getActionProvider(); Intent myIntent = new Intent(Intent.ACTION_SEND); myIntent.setType("text/plain"); myIntent.putExtra(Intent.EXTRA_TEXT, str_share); mShareActionProvider.setShareIntent(myIntent);
El XML:
<item android:id="@+id/menu_item_share" android:showAsAction="ifRoom" android:title="@string/titlePartager" android:actionProviderClass="android.widget.ShareActionProvider" android:icon="@drawable/ic_share"/>
¿Cómo puedo cambiar el icono (o el color)?
Gracias,
- Tamaño del problema de ShareAction en ActionBar con ShareActionProvider-v7
- ¿Cuál es el uso del espacio de nombres de aplicaciones en android xml
- ShareActionProvider con un icono - buscando como simple actionitem
- Cómo puedo obtener mi ShareActionProvider para enviar texto dinámicamente (de los oyentes) ver buscapersonas etc
- Barra de herramientas El tema ShareActionProvider siempre está oscuro
- Cómo manejar ShareActionProvider evento onClick
- Compartir imagen con ShareActionProvider de Picasso
- Compartir imagen y texto a través de whatsapp
Editar / Respuesta corta: si utiliza ShareActionProvider de AppCompat, sólo proporcione una nueva actionModeShareDrawable
en la definición de su tema.
<style name="MyTheme" parent="Theme.AppCompat"> <item name="actionModeShareDrawable">@drawable/my_share_drawable</item> </style>
Si no utiliza AppCompat, este recurso se define para Lollipor o más reciente , pero no para versiones anteriores.
A continuación se muestra la respuesta del ShareActionProvider
nativo (que era el ámbito original de esta pregunta).
Para cambiar esta imagen, debe cambiar el valor de actionModeShareDrawable
para el tema de su aplicación. Eche un vistazo al ShareActionProvider
onCreateActionView()
:
public View onCreateActionView() { // Create the view and set its data model. ... // Lookup and set the expand action icon. TypedValue outTypedValue = new TypedValue(); mContext.getTheme().resolveAttribute(R.attr.actionModeShareDrawable, outTypedValue, true); Drawable drawable = mContext.getResources().getDrawable(outTypedValue.resourceId); ...
Lamentablemente, este atributo no es público en el marco de Android (aunque lo es si se utilizan bibliotecas de compatibilidad, como AppCompat o ActionBarSherlock). En ese caso, es sólo cuestión de superar ese valor para el tema.
Si no está usando ninguna de estas bibliotecas, la única solución (que sé) es crear una subclase de ShareActionProvider
y ShareActionProvider
onCreateActionView()
método onCreateActionView()
. A continuación, puede utilizar cualquier dibujable que desee en su lugar.
EDIT Sin embargo esto se complica aún más por el hecho de que la implementación de onCreateActionView()
utiliza otras clases que no son públicas tampoco. Para evitar duplicar una gran cantidad de código, sólo puede cambiar el icono a través de la reflexión, como esto:
public class MyShareActionProvider extends ShareActionProvider { private final Context mContext; public MyShareActionProvider(Context context) { super(context); mContext = context; } @Override public View onCreateActionView() { View view = super.onCreateActionView(); if (view != null) { try { Drawable icon = ... // the drawable you want (you can use mContext to get it from resources) Method method = view.getClass().getMethod("setExpandActivityOverflowButtonDrawable", Drawable.class); method.invoke(view, icon); } catch (Exception e) { Log.e("MyShareActionProvider", "onCreateActionView", e); } } return view; } }
Al igual que con cualquier solución que implique reflexión, esto puede ser quebradizo si la implementación interna de ShareActionProvider
cambia en el futuro.
Para cambiar el icono de ShareActionProvider, debe extender el tema de AppCompat y establecer su icono personalizado en "actionModeShareDrawable":
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="actionModeShareDrawable">@drawable/ic_share</item> </style>
Usted puede cambiar color de fondo definiendo el estilo de encargo, como:
<resources> <style name="MyTheme" parent="@android:style/Theme.Holo.Light"> <item name="android:actionBarStyle">@style/MyActionBar</item> </style> <style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar"> <item name="android:background">ANY_HEX_COLOR_CODE</item> </style> </resources>
Ahora necesitas establecer "MyTheme"
como tema para la application / activity.
- Cómo agregar elementos a un stringArray en un arrayList mediante programación?
- Entonces, ¿cómo puedo ver los registros en Jelly Bean?