Когда использовать "? Android" или "@android"?

Я новичок и пытаюсь понять следующий XML-код:

Глядя на документацию на developer.android.com, он говорит, что "starStyle" является константой в R.attr и


public static final int starStyle Поскольку: Уровень API 1

Стиль по умолчанию Star.

Должна быть ссылка на другой ресурс в форме "@[+] [package:] type: name" или атрибут темы в форме "? [package:] [type:] name".

Кажется, что есть два синтаксиса, которые я могу объявить. 1) "@[+] [package:] type: name" 2) "? [Package:] [type:] name".

Если есть 2 синтаксиса, что является правильным для "@[+] [package:] type: name" ?

Я попробовал "@android: attr/starStyle", но я не установил флажок "star", даже если приложение скомпилировано нормально.

Ответ 1

@-syntax используется для ресурсов, определенных в вашем проекте или в рамках Android. -syntax используется для ресурсов в текущей теме.

Для starStyle, который должен быть определен в теме, вы хотите:

"? Андроида: атр /StarStyle "

См. здесь для некоторой разработки тематических ресурсов.

Ответ 2

AFAIK...

"? [package:] [type:] name" относится к стилю Android. В качестве примера атрибут стиля диалога выполнения выглядит примерно так:

стиль = "андроид: атр /progressBarStyleLarge "

Объяснение

  • ? знак равно
  • [package:] = android:
  • [type:] = attr (атрибут)
  • name = progressBarStyleLarge (или в вашем случае: starStyle)

Однако стили также ссылаются на @...

"@[+] [package:] type: name" - это какой-то ресурс.

Итак, для стиля вы должны объявить все свои стили в файле с именем "styles.xml" в вашем каталоге "values".

<style name="mono_text_headers">
    <item name="android:textSize">16sp</item>
    <item name="android:typeface">monospace</item>
    <item name="android:layout_marginBottom">5dp</item>
</style>

Затем ссылайтесь на них точно так же, как строка, выталкиваемая и т.д. style="@style/mono_text_headers"

http://developer.android.com/guide/topics/ui/themes.html

Ответ 3

Android предоставляет ярлык, позволяющий вам

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

Для этого используйте ?android: вместо @в качестве префикса для ресурса, который вы хотите использовать.

Пример:

<EditText
android:id="@+id/myEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@android:string/url"
android:textColor="?android:textColor"
/>

Этот метод позволяет вам создавать стили, которые меняются, если текущая тема меняется, без вас изменяя каждый отдельный ресурс стиля.

Ответ 4

Я много раз проверял этот вопрос, потому что это меня несколько раз путало.

Название после? вы ссылаетесь на имя переменной, которое определено в <declare-styleable>.

Имя после @- это имя стиля, определенное вами или системой.

Позвольте мне поставить аналогию с помощью С++.

Скажем, мы имеем string str1 = "Hello world".

? как строка str2 = str1. Это означает, что вы ссылаетесь на значение str1.

@похоже на string str2 = "Hello world". Это означает, что вы используете значение напрямую.

Ответ 5

@используется для доступа к определенным ресурсам

"@android:drawables/test.png"

? используется для доступа к определенному стилю темы

"?android/attr/style"

Надеюсь, что это поможет

Ответ 6

Я не уверен в краткости и просто.

? означает, что определение ресурса является частью Framework

@ означает, что определение ресурса является частью вашего Библиотека проектов/поддержки