android - studio - ¿Cómo cambiar el color del texto predeterminado usando un tema personalizado?
como poner temas en drive (4)
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
El estilo predeterminado de Android también se llama "Tema". Entonces lo llamaste tema probablemente confundió el programa.
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">
Lo que intento debería ser bastante fácil con los temas, pero no puedo encontrar la manera de hacerlo: quiero que todo el texto sea blanco de manera predeterminada en mi aplicación. Creé un tema personalizado en theme.xml:
<style name="Theme" parent="@android:Theme">
</style>
<style name="TextAppearance.Theme" parent="@android:TextAppearance.Theme">
<item name="android:textColor">#ffffffff</item>
</style>
y configurarlo para toda la aplicación:
<application
android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@style/Theme">
Pero las etiquetas siguen siendo negras. ¿Qué falta?
PD: ¿Cómo puedo, además, definir estilos para diferentes tamaños de texto, que se aplicarán por widget? ¿Es algo así?
<style name="Theme.smallText">
<item name="android:textSize">12dp</item>
</style>
actualizar
Eché un vistazo a themes.xml en Android SDK, que muestra cómo configurar el estilo de texto para un tema:
<item name="textAppearance">@android:style/TextAppearance</item>
En mi caso, debería funcionar con esta definición:
<style name="Theme" parent="@android:Theme">
<item name="android:textAppearance">@style/MyText</item>
</style>
<style name="MyText" parent="@android:style/TextAppearance">
<item name="android:textColor">#ffffffff</item>
</style>
Sin embargo, todavía no funciona.
Acabo de encontrar otra publicación para el mismo problema: http://groups.google.com/group/android-developers/browse_thread/thread/2897ccd0884546b9
En su Manifest
necesita hacer referencia al nombre del style
que tiene el item
color de texto dentro de él. En este momento, solo hace referencia a un style
vacío. Entonces en tu theme.xml haz solo este style
:
<style name="Theme" parent="@android:style/TextAppearance">
<item name="android:textColor">#ffffffff</item>
</style>
Y mantén tu referencia en el Manifest
igual ( android:theme="@style/Theme"
)
EDITAR :
theme.xml:
<style name="MyTheme" parent="@android:style/TextAppearance">
<item name="android:textColor">#ffffffff</item>
<item name="android:textSize">12dp</item>
</style>
Manifiesto:
<application
android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@style/MyTheme">
Observe que combino el color y el tamaño del texto en el mismo style
. Además, cambié el nombre del tema a MyTheme y ahora estoy haciendo referencia a eso en el Manifest
. Y cambié a @android:style/TextAppearance
para el valor parent
.
No puede usar @android:style/TextAppearance
como padre del tema de toda la aplicación; es por eso que la solución de koopaking3 parece bastante rota.
Para cambiar el color del texto predeterminado en todas partes en su aplicación utilizando un tema personalizado, intente algo como esto. Funciona al menos en Android 4.0+ (API nivel 14+).
res/values/themes.xml
:
<resources>
<style name="MyAppTheme" parent="android:Theme.Holo.Light">
<!-- Change default text colour from dark grey to black -->
<item name="android:textColor">@android:color/black</item>
</style>
</resources>
Manifiesto:
<application
...
android:theme="@style/MyAppTheme">
Actualizar
Una deficiencia con lo anterior es que los elementos del menú de desbordamiento de la barra de acciones desactivados también usan el color predeterminado, en lugar de estar atenuados. (Por supuesto, si no usa elementos de menú desactivados en ninguna parte de su aplicación, esto puede no importar).
Como aprendí al hacer esta pregunta , una mejor manera es definir el color con un dibujo :
<item name="android:textColor">@drawable/default_text_color</item>
... con res/drawable/default_text_color.xml
especifica el state_enabled="false"
separado state_enabled="false"
:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:color="@android:color/darker_gray"/>
<item android:color="@android:color/black"/>
</selector>
<color name="white">#FFFFFF</color>
<style name="Mytext" parent="@android:style/TextAppearance.Medium">
<item name="android:textSize">20sp</item>
<item name="android:textColor">@color/white</item>
<item name="android:textStyle">bold</item>
<item name="android:typeface">sans</item>
</style>
prueba este ...