Android verfügt über Stile und Themen, mit denen Sie die Entwicklung der Benutzeroberfläche strukturieren können.
Sie bestehen aus Attributen, die das Design der Elemente definieren. Attribute können erstellt oder vorhandene verwendet werden. Attributen kann ein Wert zugewiesen werden, dessen Typ beim Erstellen angegeben wird.
Ein Beispiel für eine Attributdeklaration aus dem Android SDK:
<attr name="background" format="reference|color" />
Hinweis:
Ein Verweis auf ein anderes Attribut über eine @[package:]type/name
Struktur ist ebenfalls ein Typ.
Themen gegen Stile
Themen und Stile sind sehr ähnlich, werden jedoch für unterschiedliche Zwecke verwendet.
Der Stil kombiniert die Attribute für ein bestimmtes Widget. Durch Extrahieren von Attributen in Stile können diese problemlos verwendet und über mehrere Widgets hinweg gleichzeitig verwaltet werden.
Ein Thema definiert wiederum eine Reihe von Attributen, auf die in einer Anwendung verwiesen werden kann.
Stile und Themen sollen zusammenarbeiten.
Zum Beispiel haben wir einen Stil, in dem der Hintergrund der Schaltfläche colorPrimary
und die Farbe des Textes ist colorSecondary
. Die tatsächlichen Bedeutungen dieser Farben sind im Thema angegeben.
<?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>
Wenn das Gerät in den Nachtmodus wechselt, kann die Anwendung durch Ändern der Werte dieser Ressourcen von ihrem Thema "Hell" zu "Dunkel" wechseln.
Es ist nicht erforderlich, Stile zu ändern, da Stile eher semantische Namen als bestimmte Farbressourcen verwenden.
Verknüpfungstypen in XML
Das Attribut android:background
kann verschiedene Typen annehmen:
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
Android-Styling: Gemeinsame Themenattribute
Ich empfehle weiterhin, das Video von Android Dev Summit
2019 anzuschauen . Link zum Video