Temas, estilos e atributos

O Android tem estilos e temas que permitem estruturar o desenvolvimento da interface do usuário.





Eles são compostos por atributos que definem o design dos elementos. Os atributos podem ser criados ou os existentes podem ser usados. Atributos podem ser atribuídos a um valor, o tipo do qual é especificado quando é criado.





Um exemplo de declaração de atributo do Android SDK:





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







Observação:

Uma referência a outro atributo por meio de uma @[package:]type/name



estrutura também é um tipo.





Temas vs estilos

Temas e estilos são muito semelhantes, mas são usados ​​para finalidades diferentes.





O estilo combina os atributos de um widget específico. Ao extrair atributos para estilos, eles podem ser facilmente usados ​​e mantidos em vários widgets ao mesmo tempo.





Um tema, por sua vez, define um conjunto de atributos que podem ser referenciados em um aplicativo.





Estilos e temas são projetados para funcionarem juntos.





Por exemplo, temos um estilo em que é o fundo do botão colorPrimary



e a cor do texto colorSecondary



. Os significados reais dessas cores são fornecidos no tópico.





<?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>
      
      



Quando o dispositivo entra no modo noturno, o aplicativo pode mudar de seu tema "claro" para "escuro" alterando os valores desses recursos.





Não há necessidade de alterar os estilos, pois os estilos usam nomes semânticos em vez de recursos de cores específicos.





Tipos de link em XML

O atributo android:background



pode assumir vários 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 do Android: atributos de tema comuns





Ainda recomendo assistir ao vídeo de Android Dev Summit



2019. Link para o vídeo








All Articles