Temas, estilos y atributos

Android tiene estilos y temas que le permiten estructurar el desarrollo de la interfaz de usuario.





Están formados por atributos que definen el diseño de los elementos. Se pueden crear atributos o se pueden utilizar los existentes. A los atributos se les puede asignar un valor, cuyo tipo se especifica cuando se crea.





Un ejemplo de una declaración de atributo del SDK de Android:





<attr name="background" format="reference|color" />







Nota:

Una referencia a otro atributo a través de una @[package:]type/name



estructura también es un tipo.





Temas vs estilos

Los temas y estilos son muy similares, pero se utilizan para diferentes propósitos.





El estilo combina los atributos de un widget específico. Al extraer atributos a los estilos, se pueden usar y mantener fácilmente en varios widgets al mismo tiempo.





Un tema, a su vez, define un conjunto de atributos a los que se puede hacer referencia en una aplicación.





Los estilos y temas están diseñados para trabajar juntos.





Por ejemplo, tenemos un estilo en el que es el fondo del botón colorPrimary



y el color del texto colorSecondary



. Los significados reales de estos colores se dan en el tema.





<?xml version="1.0" encoding="utf-8" ?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
		<style name="LightTheme" parent="YourAppTheme">
				<item name="colorPrimary">#FFFFFF</item>
				<item name="colorSecondary">#000000</item>
		</style>

		<style name="DarkTheme" parent="YourAppTheme">
				<item name="colorPrimary">#000000</item>
				<item name="colorSecondary">#FFFFFF</item>
		</style>

		<style name="Button.Primary" parent="Widget.MaterialComponents.Button">
				<item name="android:background">?attr/colorPrimary</item>
				<item name="android:textColor">?attr/colorSecondary</item>
		</style>
</resources>
      
      



Cuando el dispositivo entra en modo nocturno, la aplicación puede cambiar de su tema "claro" a "oscuro" cambiando los valores de estos recursos.





No es necesario cambiar los estilos, ya que los estilos utilizan nombres semánticos en lugar de recursos de color específicos.





Tipos de enlaces en XML

El atributo android:background



puede tomar varios tipos:





android:background="@color/colorPrimary"
android:background="?attr/colorPrimary"
      
      



@color/colorPrimary



- c colorPrimary



, <color name="colorPrimary">#FFFFFF<color>



, res/values/color.xml



.





:

- , , «name», XML-. , XML- <resources>



, .





, ?attr



- .





?attr/colorPrimary



  colorPrimary



, :





<?xml version="1.0" encoding="utf-8" ?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
		<style name="YourAppTheme" parent="Theme.AppCompat.Light.NoActionBar">
				<item name="colorPrimary">@color/colorPrimary</item>
		</style>
</resources>
      
      



?attr



, .





, .









, , , .





@[package:]type/name







  1. package



    - () , . - , .





  2. type



    - color



    , string



    , dimen



    , layout



    - . .





  3. name



    - , .





?[package:]type/name







  1. package



    - () , . - , .





  2. type



    - () attr



    ?



    .





  3. name



    - , .





? vs ?attr vs ?android:attr

, , ?android:attr/colorPrimary



, ?attr/colorPrimary



, ?colorPrimary



.





, Android SDK, android



, .





?



?attr



, (, AppCompat MaterialDesign), , .





Android SDK, , colorPrimary



.





, API.





Google Android :





  1. Theming with AppCompat





  2. Android styling: themes vs styles





  3. What’s your text’s appearance?





  4. Android Styling: themes overlay





  5. Android Styling: prefer theme attributes





  6. Estilo de Android: atributos de tema comunes





Todavía recomiendo ver el video de Android Dev Summit



2019. Enlace al video








All Articles