He resuelto esto haciendo lo siguiente.
Creado esto para hacer la forma de la esquina redondeada con un color sólido. Esto también agrega un negro translúcido para darle una apariencia presionada contra un fondo negro. res/dibujable/shape_notification.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke android:color="#33000000" android:width="2dp"/>
<corners android:radius="4dp" />
<solid android:color="#99333333"/>
</shape>
El dibujable capa se utiliza como el dibujable real en el elemento de la barra de acción. Tiene el fondo (escrito arriba) superpuesto con el icono de la llave inglesa. res/estirable/layer_customizer.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/shape_notification" />
<item android:drawable="@drawable/ic_menu_preferences" />
</layer-list>
código Java para cambiar el color. La vista de destino es el objeto asignado al layer_customizer dibujable. El color transferido cambiará el color sólido de la etiqueta shape_notification.xml.
public static void setCustomizerDrawableColor(final View target, final int color) {
final Drawable d = target.getDrawable();
LayerDrawable layer = (LayerDrawable)d;
GradientDrawable gradient = (GradientDrawable)layer.getDrawable(0);
gradient.setColor(color);
gradient.invalidateSelf();
layer.invalidateSelf();
target.invalidate();
}
Cree un diseño con estas capas. res/layout/actionview_customizer.xml
<?xml version="1.0" encoding="utf-8"?>
<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/ActionViewCustomizer"
android:src="@drawable/layer_customizer"
android:contentDescription="@string/customize"
style="@style/ActionBarButton" />
Para obtener el diseño personalizado para poner en la Barra de acciones agregar este elemento de menú en él: res/menú/actionbar_main.xml
<item android:id="@+id/MenuItemCustomize"
android:icon="@drawable/layer_customizer"
android:title="@string/customize"
android:showAsAction="always"
android:actionLayout="@layout/actionview_customizer"
/>
Luego, después de cargar la barra de acciones, use este código para obtener el control del botón. Esto sucede en tu Actividad.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.actionbar_main, menu);
final ActionBar actionBar = getActionBar();
final MenuItem customizerItem = menu.findItem(R.id.MenuItemCustomize);
View v = customizerItem.getActionView();
customizerActionView = (ImageButton) v;
customizerActionView.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
onOptionsItemSelected(customizerItem);
}
});
}
Si desea ver el código fuente completo trabajando juntos mirar el código fuente de la aplicación en uso este. http://code.google.com/p/motivatormaker-android/source/browse/MakeMotivator/src/com/futonredemption/makemotivator/activities/MainActivity.java
¿Conoce cómo hacerlo como Google hace, sin personalización? – AndrewS