Подтвердить что ты не робот

Android - определение цветов путем ссылки на другие определенные цвета

Я снова и снова задавался вопросом, есть ли способ определить цвета в colors.xml, указав другой цвет, который был определен. Ну, я попробовал и действительно, кажется, что вы можете ссылаться на другие цвета, используя @color/XXX.

Например, один цвет .xml может выглядеть так:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    …
    <color name="primary_blue">#205081</color>
    <color name="action_bar_text">@color/primary_blue</color>
    …
</resources>

Но я не хочу, чтобы другие использовали мое определение primary_blue напрямую - не имеет смысла делать что-то синим без контекста. Лучшим решением, которое я придумал, является префикс "прямых" цветов, например primary_blue, а затем комментарий, что они не должны использоваться напрямую.

Есть ли способ предотвратить использование этих прямых цветов, сохраняя при этом мой файл colors.xml ссылаться на них? Я думаю, что, возможно, стили, или апклиб может помочь мне.

4b9b3361

Ответ 1

Добавление ответа здесь в случае, если кто-то столкнется с этим в будущем.

При создании библиотеки Android вы можете отмечать ресурсы как общедоступные. Любой ресурс, который не находится в файле public.xml, считается приватным.

Неявно создание атрибутов private не только препятствует пользователям вашей библиотеки испытывать предложения о завершении кода из внутренних ресурсов библиотеки, но также позволяет вам переименовывать или удалять личные ресурсы, не разбирая клиентов вашей библиотеки. Частные ресурсы отфильтровываются из завершения кода и редактора темы, а Lint предупреждает вас, когда вы пытаетесь ссылаться на частный ресурс.