Когда использовать "? 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
@ означает, что определение ресурса является частью вашего Библиотека проектов/поддержки