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:backgroundTint
propiedad aún no funciona (tal vez estoy haciendo algo mal), por lo que debe configurar el ColorStateList
código in, usando setSupportBackgroundTintList()
. Sería muy bueno ver el android:backgroundTint
apoyo en el futuro. Actualización : ¡Marcio Granzotto comentó que app:backgroundTint
funciona 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 AppCompatButton
lugar de lo normal Button
si 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 ColorStateList
de 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.AppCompat
temas, o las vistas compatibles serán muy, muy tristes ...;)
Esto funcionó tanto en 2.3.7 (Gingerbread MR1) como en 5.0 (Lollipop 'Classic').