Android propose des styles et des thèmes qui vous permettent de structurer le développement de l'interface utilisateur.
Ils sont constitués d'attributs qui définissent la conception des éléments. Les attributs peuvent être créés ou les attributs existants peuvent être utilisés. Une valeur peut être attribuée aux attributs, dont le type est spécifié lors de leur création.
Un exemple de déclaration d'attribut du SDK Android:
<attr name="background" format="reference|color" />
Noter:
Une référence à un autre attribut via une @[package:]type/name
structure est également un type.
Thèmes vs styles
Les thèmes et les styles sont très similaires, mais ils sont utilisés à des fins différentes.
Le style combine les attributs d'un widget spécifique. En extrayant les attributs des styles, ils peuvent être facilement utilisés et conservés dans plusieurs widgets en même temps.
Un thème, à son tour, définit un ensemble d'attributs qui peuvent être référencés dans une application.
Les styles et les thèmes sont conçus pour fonctionner ensemble.
Par exemple, nous avons un style dans lequel l'arrière-plan du bouton est colorPrimary
et la couleur du texte est colorSecondary
. La signification réelle de ces couleurs est donnée dans le sujet.
<?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>
Lorsque l'appareil passe en mode nuit, l'application peut passer de son thème «clair» à «sombre» en modifiant les valeurs de ces ressources.
Il n'est pas nécessaire de modifier les styles, car les styles utilisent des noms sémantiques plutôt que des ressources de couleurs spécifiques.
Types de lien en XML
L'attribut android:background
peut prendre plusieurs types:
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
?[package:]type/name
package
- () , . - , .
type
- ()attr
?
.
name
- , .
? vs ?attr vs ?android:attr
, , ?android:attr/colorPrimary
, ?attr/colorPrimary
, ?colorPrimary
.
, Android SDK, android
, .
?
?attr
, (, AppCompat MaterialDesign), , .
Android SDK, , colorPrimary
.
, API.
Google Android :
-
Android styling: themes vs styles
What’s your text’s appearance?
Android Styling: themes overlay
Android Styling: prefer theme attributes
Style Android: attributs de thème communs
Je recommande toujours de regarder la vidéo de Android Dev Summit
2019. Lien vers la vidéo