Использование пользовательских атрибутов и пространства имен в android - PullRequest
0 голосов
/ 22 января 2020

Структура пакета в основном: app>src>main>com.example.customviews, внутри которой существует папка view, содержащая файл CustomView.java.

Внутри файла attrs.xml в папке res я определяю stylable следующим образом:

<resources>
<declare-styleable name="PieChart">
        <attr name="showText" format="boolean"/>
        <attr name="labelPosition" format="enum">
            <enum name="left" value="0"/>
            <enum name="right" value="1"/>
        </attr>
    </declare-styleable>  
</resources>

В activity_main.xml (Mainactivity.java также находится в com.example.customviews каталог) Я попытался определить пространство имен для своих пользовательских атрибутов следующим образом:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:custom="http://schemas.android.com/apk/res/com.example.customviews"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity"
    android:gravity="center">

...
...
...  

</LinearLayout>  

Но для определенного пространства имен android выдает мне следующее сообщение об ошибке в редакторе:

В проектах Gradle всегда используйте http://schemas.android.com/apk/res-auto для пользовательских атрибутов меньше ... (Ctrl + F1) Информация о проверке: в проектах Gradle фактический пакет, используемый в окончательном APK, может отличаться; Например, вы можете добавить суффикс пакета .debug в одной версии, а не в другой. Поэтому вам не следует жестко кодировать пакет приложения в ресурсе; вместо этого используйте специальное пространство имен http://schemas.android.com/apk/res-auto, которое заставит инструменты определить правильное пространство имен для ресурса независимо от фактического пакета, использованного во время сборки.

Это приносит следующие два вопроса:

  1. Что делает URI http://schemas.android.com/apk/res-auto, он динамически разрешается с помощью android? Как и для app пространства имен, оно разрешается в один URI, а для custom пространства имен оно используется для другого?
  2. В документации android используется пользовательский URI, как я определил выше , почему ошибка возникает в android studio, когда я это делаю?

1 Ответ

1 голос
/ 22 января 2020

Вам не нужно настраивать пространство имен. Если ваш пакет customviews включен в ваш проект, его атрибуты будут объединены с вашими проектами, и вы можете просто использовать app: для них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...