Я пишу некоторые приложения для Android, но я не понимаю, когда использовать app:
и когда использовать android:
. Когда стили не применяются так, как они предполагают, я использую пробную версию и ошибку, и иногда обнаруживаю, что использование app:
вместо android:
решает проблему, но я не понимаю, почему. Было бы здорово, если бы кто-то мог указать мне в правильном направлении. Спасибо!
Android Layout - когда использовать приложение: vs android:?
Ответ 1
Вы говорите о пользовательском пространстве имен. В Android мы можем создавать пользовательские представления в дополнение к уже доступным представлениям. Согласно документам Google для разработчиков. Чтобы добавить встроенный View в свой пользовательский интерфейс, вы указываете его в элементе XML и управляете его внешним видом и поведением с помощью атрибутов элемента. Хорошо написанные пользовательские представления также можно добавлять и стилизовать с помощью XML. Чтобы включить это поведение в своем пользовательском представлении, вы должны:
Определите пользовательские атрибуты для вашего представления в элементе ресурса. Укажите значения для атрибутов в макете XML. Извлечение значений атрибута во время выполнения. Примените полученные значения атрибута к вашему представлению.
Определив пользовательские атрибуты, вы можете использовать их в XML файлах макета, как встроенные атрибуты. Разница лишь в том, что ваши пользовательские атрибуты принадлежат другому пространству имен. Вместо того, чтобы принадлежать к пространству имен http://schemas.android.com/apk/res/android, они принадлежат http://schemas.android.com/apk/res/[y[your имени пакета]
Так что, если вы используете представления по умолчанию, вы можете использовать пространство имен Android, а если вы хотите установить и использовать атрибуты для пользовательского представления, вы можете определить свое собственное имя.
Отослать это
Ответ 2
Вы можете использовать пространство имен приложения, чтобы обеспечить совместимость приложения со старыми версиями API.
Например, app: srcCompat = "@drawable/customborder" имеет те же эффекты, что и для android: background = "@drawable/customborder". Разница в том, что первый будет работать правильно с более старым API, а второй не будет отображать то, что вам нужно.
Ответ 3
Если вы посмотрите на начало ваших XML файлов макета (в которых вы использовали app:
), вы, вероятно, найдете такие строки:
<?xml version="1.0" encoding="utf-8"?>
<SOME_LAYOUT xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
в этом случае пространство имен app:
будет использоваться для пользовательских атрибутов, указанных вами внутри файла attrs.xml
или кого-то другого в одной из используемых библиотек.
Ответ 4
Кроме того, вы найдете два варианта
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:app="http://schemas.android.com/apk/[packagename]"
разница между строками xmlns заключается в том, что res-auto заботится о разрешении нашего пакета, поскольку когда-то мы добавим в наш пакет .debug или .test, и мы уже предоставили packageid приложения Ex:
xmlns:app="http://schemas.android.com/apk/com.test.io.debug"
xmlns:app="http://schemas.android.com/apk/com.test.io.test"
Ответ 5
Иногда свойство с Android доступно только в новой версии Android, как
В этом случае вам следует использовать app:...
чтобы он работал со старой версией.