Las malas noticias
Como dice BoD, no tiene sentido teñir los antecedentes de un Button en Lollipop 5.0 (API nivel 21).
Las buenas noticias
Lollipop 5.1 (API nivel 22) parece haber solucionado este problema cambiando btn_mtrl_default_shape.xml (entre otros archivos): https://android.googlesource.com/platform/frameworks/base/+/6dfa60f33ca6018959ebff1efde82db7d2aed1e3%5E!/#
La gran noticia
La nueva biblioteca de soporte (versión 22.1+) agrega soporte de tintado compatible con versiones anteriores a muchos componentes, incluido AppCompatButton .
Desafortunadamente, la android:backgroundTintpropiedad aún no funciona (tal vez estoy haciendo algo mal), por lo que debe configurar el ColorStateListcódigo in, usando setSupportBackgroundTintList(). Sería muy bueno ver el android:backgroundTintapoyo en el futuro. Actualización : ¡Marcio Granzotto comentó que app:backgroundTintfunciona en AppCompatButton! Tenga en cuenta que no lo es app:, android:porque está en la aplicación / biblioteca.
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<AppCompatButton
android:id="@+id/mybutton"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="Testing, testing"
app:backgroundTint="#ff00ff"/>
</LinearLayout>
Su actividad se inflará automáticamente en AppCompatButtonlugar de lo normal Buttonsi deja que herede AppCompatActivity.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AppCompatButton v = (AppCompatButton) findViewById(R.id.mybutton);
ColorStateList csl = new ColorStateList(new int[][]{new int[0]}, new int[]{0xffffcc00});
v.setSupportBackgroundTintList(csl);
}
}
Por supuesto, debería obtener el ColorStateListde un recurso de color, pero yo era un vago, así que ...
Ah, y no olvides basar el tema de tu aplicación en uno de los Theme.AppCompattemas, o las vistas compatibles serán muy, muy tristes ...;)
Esto funcionó tanto en 2.3.7 (Gingerbread MR1) como en 5.0 (Lollipop 'Classic').