web-dev-qa-db-fra.com

Que signifie? Attr / mean sur Android?

Je travaille sur un exemple de bibliothèque de support et de barre d'outils, c'est le code de la mise en page sur la documentation Android

<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"/>

C'est la première fois que je vois ces ?attr et je n'ai aucune idée de ce qu'ils signifient ou où sont stockées ces valeurs. Est-ce personnalisé ou prédéfini sur le framework Android?

Référence: Documentation de la barre d'outils Android

27
Julio Bastida

?attr/ références aux attributs. Les attributs sont des valeurs spécifiées dans le thème d'une application. Les attributs de votre exemple sont toutes des valeurs spécifiées dans les thèmes fournis par la bibliothèque de support. Android possède également ses propres attributs qui peuvent être utilisés avec ?android:attr/.

La valeur réelle qui va être utilisée à la fin dépend du thème utilisé pour gonfler ladite disposition. Ce thème peut être spécifié dans le manifeste dans le <application/> bloc pour un thème à l'échelle de l'application ou dans le <activity/> bloc pour une activité spécifique. Vous pouvez également remplacer ce thème pendant l'exécution en utilisant un contexte différent (voir ContextThemeWrapper et LayoutInflater )

Il est considéré comme une bonne pratique d'utiliser des attributs de thème au lieu de valeurs codées en dur dans vos mises en page, car cela permet une personnalisation facile. Par exemple, lorsque vous créez des vues personnalisées, vous pouvez utiliser ?attr/colorAccent afin que l'utilisateur de la vue n'ait pas à fournir de couleur, et qu'il utilisera à la place le colorAccent utilisé dans les thèmes de l'application.

Cela devient encore plus pertinent aujourd'hui, comme avec l'introduction des thèmes sombres dans Android Q, vos mises en page doivent spécifier un attribut de sorte que la valeur finale soit différente lorsque vous utilisez un thème clair par rapport à un thème sombre.

23
Alex Styl

Une ressource d'attribut de style vous permet de référencer la valeur d'un attribut dans le thème actuellement appliqué.

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

5
Sharj