Что делает?attr / mean на Android?

Я работаю над примером о библиотеке поддержки и панели инструментов, это код макета на документации 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"/>

Это первый раз, когда я вижу эти ?attr и я понятия не имею, что они означают или где хранятся эти значения. Являются ли они обычными или они предопределены в рамках Android?

ссылки: Документация Панели Инструментов Android

2 ответов


?attr/ ссылки на атрибуты. Атрибуты-это значения, указанные в теме приложения. Эти конкретные атрибуты в вашем примере - это все значения, указанные в темах, предоставляемых библиотекой поддержки. Андроид имеет свои собственные атрибуты, и они могут быть использованы ?android:attr/.

в некоторых случаях считается хорошей практикой использовать значения атрибутов вместо значений напрямую, поскольку это позволяет легко настраивать. Например, при создании пользовательских представлений можно использовать ?attr/colorAccent так что пользователь представления не должен предоставлять цвет, и он будет использовать colorAccent используется в темах приложения вместо этого.


ресурс атрибута стиля позволяет ссылаться на значение атрибут в текущей теме.

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