Was bedeutet ?attr/ auf Android?

Lesezeit: 2 Minuten

Benutzer-Avatar
Julio Bastida

Ich arbeite an einem Beispiel zu Support Library und Toolbar, dies ist der Code des Layouts in der Android-Dokumentation

<android.support.v7.widget.Toolbar
    android:id="@+id/my_toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    android:elevation="4dp"
    android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

Es ist das erste Mal, dass ich diese sehe ?attr und ich habe keine Ahnung, was sie bedeuten oder wo diese Werte gespeichert sind. Sind diese benutzerdefiniert oder im Android-Framework vordefiniert?

Bezug: Android Toolbar-Dokumentation

Benutzer-Avatar
Alex Stil

?attr/ Verweise auf Attribute. Attribute sind Werte, die im Design einer App angegeben sind. Die Attribute in Ihrem Beispiel sind alle Werte, die in den Themen angegeben sind, die von der Support-Bibliothek bereitgestellt werden. Android hat auch seine ganz eigenen Attribute, mit denen verwendet werden kann ?android:attr/.

Der tatsächliche Wert, der am Ende verwendet wird, hängt von dem Thema ab, das zum Aufblasen des besagten Layouts verwendet wird. Dieses Thema kann im Manifest in der angegeben werden <application/> Block für ein App-weites Thema oder in der <activity/> Sperre für eine bestimmte Aktivität. Sie können dieses Thema auch während der Laufzeit überschreiben, indem Sie einen anderen Kontext verwenden (siehe ContextThemeWrapper und LayoutInflater)

Es wird als bewährte Methode angesehen, Designattribute anstelle von hartcodierten Werten in Ihren Layouts zu verwenden, da dies eine einfache Anpassung ermöglicht. Wenn Sie beispielsweise benutzerdefinierte Ansichten erstellen, können Sie verwenden ?attr/colorAccent sodass der Benutzer der Ansicht keine Farbe angeben muss und die verwendet wird colorAccent stattdessen in den App-Designs verwendet.

Dies wird heute noch relevanter, da Ihre Layouts mit der Einführung von Dark Themes in Android Q ein Attribut angeben sollten, damit der Endwert unterschiedlich ist, wenn Sie ein helles Design von einem dunklen Design verwenden.

  • “Attribute sind Werte, die in Ihrem App-Design angegeben sind”. Welches Thema? Es gibt viele Themen in Android. Benötigt mehr Erklärung und Beispiel, wenn möglich

    – oiyio

    21. März 2019 um 15:15 Uhr

Mit einer Stilattributressource können Sie auf den Wert eines Attributs im aktuell angewendeten Thema verweisen.

https://developer.android.com/guide/topics/resources/accessing-resources.html#ReferencesToThemeAttributes

Anstatt eine statische Farbe festzulegen (#ffffff oder ein @color Ressource) können wir an das Thema delegieren, indem wir die verwenden ?attr/themeAttributeName
Syntax. Diese Syntax bedeutet: Fragen Sie das Design nach dem Wert dieses semantischen Attributs ab.

Dies Post on Medium gibt eine ziemlich detaillierte Erklärung zu Stilen und Themen.

1064640cookie-checkWas bedeutet ?attr/ auf Android?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy