Android-стили: разница между «style =» @ android: style / XYZ »и« style = »? Android: attr / XYZ?

Я пытаюсь стилизовать кнопки, чтобы они выглядели как те, о которых я прошу в Android Minimalist Bottom ButtonsViews в стиле Android Full Width .

Я преуспел, со следующим 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> 

Один вопрос. Помощник Content Eclipse не имеет представления о том, что происходит со следующим разрешением ресурса:

style="?android:attr/buttonBarButtonStyle"

Я знаком с типичной резолюцией (о которой помогает контентная поддержка eclipse)

style=@android/style/...

… но я не понимаю разницы между ними. Кажется, что некоторые атрибуты стиля появляются в одном, но не в другом. Например, следующее ничего не решает:

style=@android:attr/buttonBarStyle

И не делает этого:

style="@android:style/buttonBarStyle

Поэтому, я думаю, здесь есть два вопроса:

  1. Почему разница в синтаксисе ссылок на ресурсы?
  2. Почему запутанная неправильная классификация стилей в категории attr.
  3. Что такое категория attr, даже используемая для повторного использования?

Благодаря!

Из другого ответа на SO (перефразируя здесь):

Использование вопросительного знака перед идентификатором означает, что вы хотите получить доступ к атрибуту стиля, определенному в теме стиля, а не жестко кодировать атрибут.

Подумайте об этом как о разыменовании атрибута темы, чтобы извлечь ресурс, на который он указывает, а не ссылаться на сам атрибут.

Ссылка на атрибуты стиля

? 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 говорит: «Он использует стиль, определенный этим атрибутом, в текущей теме»,