Android-стили: разница между "style =" @android: style/XYZ "'и' style ="? Android: attr/XYZ "??
Я пытаюсь стилизовать кнопки, чтобы они выглядели как те, о которых я прошу в Android Minimalist Bottom ButtonsViews в стиле Android.
Я преуспел, со следующим xml для всех, кого это интересует:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="bottom"
android:divider="@android:drawable/divider_horizontal_dark"
android:gravity="bottom"
android:orientation="vertical"
android:paddingTop="16dip"
android:showDividers="beginning|end" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:measureWithLargestChild="true"
android:orientation="horizontal"
android:divider="@android:drawable/divider_horizontal_dark"
android:showDividers="middle" >
<Button
android:id="@+id/cancel_button"
style="?android:attr/buttonBarButtonStyle"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:layout_weight="1"
android:maxLines="2"
android:text="@string/cancel_button" />
<Button
android:id="@+id/login_button"
style="?android:attr/buttonBarButtonStyle"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:layout_weight="1"
android:filterTouchesWhenObscured="true"
android:maxLines="2"
android:text="@string/login_button" />
</LinearLayout>
</LinearLayout>
Один вопрос. Помощник по контексту eclipse не знает, что происходит со следующим разрешением ресурса:
style="?android:attr/buttonBarButtonStyle"
Я знаком с типичным разрешением (о котором помогает помощь в освещении затмения)
[email protected]/style/...
... но я не совсем понимаю разницу между ними. Кажется, что некоторые атрибуты стиля появляются в одном, но не в другом. Например, следующее ничего не решает:
[email protected]:attr/buttonBarStyle
и не делает этого:
style="@android:style/buttonBarStyle
Итак, я думаю, здесь два вопроса:
- Почему разница в синтаксисе ссылок на ресурсы?
- Почему запутанная неправильная классификация стилей в категории attr.
- Что такое категория attr, которая используется еще раз?
Спасибо!
Ответы
Ответ 1
От еще один ответ на SO (перефразируемый здесь):
Использование вопросительного знака перед идентификатором означает, что вы хотите получить доступ к атрибуту , определенному в теме стиля, а не жестко кодировать атрибут.
Подумайте об этом как о разыменовании атрибута темы, чтобы извлечь ресурс, на который он указывает, а не ссылаться на сам атрибут.
Ссылка на атрибуты стиля
Ответ 2
? android: attr/buttonBarButtonStyle или просто ? android: buttonBarButtonStyle - (attr необязательно)
<item name="buttonBarButtonStyle">@android:style/Widget.Button</item>
Это внутренние различия в @android: style/Widget.Button, которые определены в файле appcompat/res/values / themes.xml.
(? android:) - всегда ссылается на значение атрибута из применяемой текущей темы. Таким образом, позволяя нам отнести определенный стиль к андроиду, скорее создав новый, и предоставив строго кодированное значение.
Google Doc говорит: Он использует стиль, определенный этим атрибутом, в текущей теме