programacion - curso android desarrollo de aplicaciones móviles pdf
Android: cambie el texto del botón y el color de fondo (6)
Aquí hay un ejemplo de un dibujable que será blanco por defecto, negro cuando se lo presione:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape>
<solid
android:color="#1E669B"/>
<stroke
android:width="2dp"
android:color="#1B5E91"/>
<corners
android:radius="6dp"/>
<padding
android:bottom="10dp"
android:left="10dp"
android:right="10dp"
android:top="10dp"/>
</shape>
</item>
<item>
<shape>
<gradient
android:angle="270"
android:endColor="#1E669B"
android:startColor="#1E669B"/>
<stroke
android:width="4dp"
android:color="#1B5E91"/>
<corners
android:radius="7dp"/>
<padding
android:bottom="10dp"
android:left="10dp"
android:right="10dp"
android:top="10dp"/>
</shape>
</item>
</selector>
¿Cómo puedo cambiar el texto y los colores de fondo cuando se presiona mi botón, con xml?
Para cambiar el color del texto, puedo hacer lo siguiente:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="mycolor"/>
<item android:color="mycolor2/>
</selector>
Para cambiar el fondo que puedo hacer (usándolo en un selector / elemento con referencia dibujable):
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FF0079FF" />
</shape>
¿Pero cómo puedo hacer las dos cosas? Digamos que quiero tener:
- Predeterminado: texto negro / fondo blanco
- Presionado: texto blanco / fondo azul
EDITAR: respuesta
Totalmente olvidé que el fondo y el color del texto se administran por separado, así que así es como lo hice:
<Button
android:textColor="@color/filtersbuttoncolors"
android:background="@drawable/mybackgroundcolors" />
En mybackgroundcolors.xml administro el fondo y en filtersbuttoncolors.xml administro el color del texto. En ambos archivos xml administro el estado (presionado, seleccionado, predeterminado)
Creo que hacerlo de esta manera es mucho más simple:
button.setBackgroundColor(Color.BLACK);
Y necesita import android.graphics.Color;
no: import android.R.color;
O simplemente puede escribir el código hexadecimal de 4 bytes (no de 3 bytes) 0xFF000000
donde el primer byte está configurando el alfa.
Cuando creas una aplicación, se creará un archivo llamado styles.xml en tu carpeta res / values. Si cambia los estilos, puede cambiar el fondo, el color del texto, etc. para todos sus diseños. De esta forma, no tiene que entrar en cada diseño individual y cambiarlo manualmente.
styles.xml:
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="Theme.AppBaseTheme" parent="@android:style/Theme.Light">
<item name="android:editTextColor">#295055</item>
<item name="android:textColorPrimary">#295055</item>
<item name="android:textColorSecondary">#295055</item>
<item name="android:textColorTertiary">#295055</item>
<item name="android:textColorPrimaryInverse">#295055</item>
<item name="android:textColorSecondaryInverse">#295055</item>
<item name="android:textColorTertiaryInverse">#295055</item>
<item name="android:windowBackground">@drawable/custom_background</item>
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>
parent="@android:style/Theme.Light"
son los colores nativos de Google. Aquí hay una referencia de cuáles son los estilos nativos: https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/themes.xml
name="Theme.AppBaseTheme"
significa que está creando un estilo que hereda todos los estilos de parent="@android:style/Theme.Light"
. Esta parte puede ignorar a menos que desee heredar de AppBaseTheme nuevamente. = <style name="AppTheme" parent="AppBaseTheme">
@ drawable / custom_background es una imagen personalizada que coloqué en la carpeta del dibujo. Es una imagen png de 300x300.
# 295055 es un color azul oscuro.
Mi código cambia el fondo y el color del texto. Para el texto del Botón, mira a través de las páginas originales de Google (el enlace que te di más arriba).
Luego, en el Manifiesto de Android, recuerda incluir el código:
<application
android:theme="@style/Theme.AppBaseTheme">
Desde API nivel 21 puedes usar:
android:backgroundTint="@android:color/white"
solo tienes que agregar esto en tu xml
Solo complementando la respuesta de @ Jonsmoke.
Para API nivel 21 y superior, puede usar:
android:backgroundTint="@android:color/white"
en XML para el diseño del botón.
Para nivel de API inferior a 21, use un AppCompatButton usando el espacio de nombres de la aplicación en lugar de android para backgroundTint .
Por ejemplo:
<android.support.v7.widget.AppCompatButton
android:id="@+id/my_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="My Button"
app:backgroundTint="@android:color/white" />
agregue la línea siguiente en styles.xml
<style name="AppTheme.Gray" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorButtonNormal">@color/colorGray</item>
</style>
en el botón, agregue android:theme="@style/AppTheme.Gray"
, ejemplo:
<Button
android:theme="@style/AppTheme.Gray"
android:textColor="@color/colorWhite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@android:string/cancel"/>