Android declare styleable format

Содержание
  1. Русские Блоги
  2. declare-styleable: настраиваемые атрибуты элемента управления
  3. title: declare-styleable: настраиваемые атрибуты элемента управления 20180312
  4. 1. Основное использование
  5. 2. Введение в типы данных настраиваемых атрибутов:
  6. Интеллектуальная рекомендация
  7. Используйте шаблон состояния вместо if else
  8. Проектирование архитектуры: схема проектирования уровня балансировки нагрузки (5) — установка одного узла LVS
  9. Рыба образования, средняя школа закончила в учебном класс, как найти первую работу.
  10. Синглтон паттерн в питоне
  11. Java Counce Collection
  12. Вам также может понравиться
  13. динамический прокси-сервер jdk (Proxy, InvocationHandler), включая исходный код $ Proxy0
  14. Юля: Об изменениях в Array 1.0
  15. студия Android генерирует статическую библиотеку jni
  16. Nginx 502 раствор
  17. Java вызывает SMS-интерфейс WebService
  18. Android. Заметка на будущее
  19. Layouts
  20. Attrs
  21. Dimensions
  22. Colors
  23. Использовать declare styleable для установки типа ввода пользовательских компонентов
  24. Объявление атрибутов стиля в Android

Русские Блоги

declare-styleable: настраиваемые атрибуты элемента управления

title: declare-styleable: настраиваемые атрибуты элемента управления 20180312

1. Основное использование

1.1 Определите файл attrs.xml в файле res / values, код выглядит следующим образом:

1.2 Используйте этот атрибут в макете xml следующим образом:

1.3 В пользовательском компоненте вы можете получить значение, определенное в xml, следующим образом:

2. Введение в типы данных настраиваемых атрибутов:

  1. ссылка: ссылка на идентификатор ресурса в указанной теме.
  1. Цвет: цвет
  1. boolean: логическое значение
  1. измерение: значение измерения
  1. float: с плавающей точкой
  1. целое число: целое число
  1. строка: строка
  1. фракция: процент
  1. перечисление: перечисление
  1. флаг: побитовая операция ИЛИ
  1. При определении атрибутов можно указать многие типы значений:

Интеллектуальная рекомендация

Используйте шаблон состояния вместо if else

Большинство разработчиков все еще используютif elseСтруктура процесса, виделиjdonизbanqСтатья написана Большим Братом, используяcommand,aopЗамена шаблонаif elseСтруктура процесса. Я не совсем понял эт.

Проектирование архитектуры: схема проектирования уровня балансировки нагрузки (5) — установка одного узла LVS

1 Обзор Предыдущая статья «Проектирование архитектуры: проектирование уровня балансировки нагрузки (4) — Принципы LVS» (http://blog.csdn.net/yinwenjie/article/details/46845997), мы предста.

Рыба образования, средняя школа закончила в учебном класс, как найти первую работу.

Self-брат Я девять ноль, теперь занимается разработкой веб-конца Java. Некоторое понимание и восприятие учебных курсов. Учебное заведение является ямой, дорога, что вы уже прошли, только вы знаете, дл.

Синглтон паттерн в питоне

Дизайн шаблона Шаблон дизайна — это краткое изложение предыдущей работы, которое, как правило, широко распространено людьми и является зрелым решением конкретной проблемы. Он предназначен для многораз.

Java Counce Collection

TRUEEWAP основан на реализации красных навигаций. Это отображение отсортировано в соответствии с его природооформленным порядком или отсортировано в соответствии с компаратором, предусмотренным при со.

Вам также может понравиться

динамический прокси-сервер jdk (Proxy, InvocationHandler), включая исходный код $ Proxy0

1. Связанные классы и методы: java.lang.reflect.Proxy, Прокси предоставляет статические методы для создания динамических прокси-классов и экземпляров. newProxyInstance() Возвращает экземпляр прокси-кл.

Юля: Об изменениях в Array 1.0

Версии до 1.0, например 0.2-0.6, Но теперь 1.0 это сообщит об ошибке. Это использование претерпело серьезные изменения! такие как: Это можно считать серьезным изменением.

студия Android генерирует статическую библиотеку jni

Android Сяобай, который только что вошел в общество, описывает, как использовать студию Android для создания статической библиотеки jni. 1. Подготовка: Сначала установите ndk, сначала сами Baidu, позж.

Nginx 502 раствор

Общие решения Nginx 502 Bad Gateway следующие: Nginx 502 Ошибка 1: Количество сайтов велико, а количество PHP-CGI мало. Для этой 502 ошибки просто увеличивайте количество процессов PHP-CGI. В частност.

Java вызывает SMS-интерфейс WebService

1. Описание интерфейса WebService Отправьте в виде http-сообщения, выше — информация о запросе, а ниже — возвращаемое значение. Представлен раздел возвращаемого значения документа интерфейса. 2. Код J.

Источник

Android. Заметка на будущее

Layouts

Думаю каждый начинающий программист под платформу Android, сразу замечает, чтобы построить какой-либо UI, требуется создать xml файл в директории проекта /res/layout, а потом еще чудесным образом связать его с кодом на Java. По началу это кажется своебразным методом и сразу появлется ощущение того, что чего-то не хватает, и UI дизайнер в плагине Android для IDE далеко не чудо. Ну хватит разглагольствований, к делу!

Читайте также:  Вай фай между андроид

Если сильно не углубляться в разнообразие устройств на рынке, что в моем случае так и вышло, есть платформа Android какой-то версии, знаем размер экрана целевого устройства. Допустим у вас такая же ситуация.

В общем случае приходиться иметь две папки /res/layout и /res/layout-land. Здесь -land выступает квалификатором (qualifier), который обозначает, что любой layout в этой папке доступен только для Landscape (горизонтального) режима. Если существует layout, который одинакого выглядит для обоих режимов, вертикального и горизонтального, то его помещают в /res/layout. Android самостоятельно вызывает деструктор Activity и создает новое Activity при повороте экрана, если не указана конкретная ориентация в AndroidManifest. Таким образом, можно размещать layout с одним и тем же именем в обоих папках /res/layout и /res/layout-land, а Android позаботится о загрузке актуального layout.

В коде Activity, как обычно, вызывается

Что от меня? И правда, описал в кратце то, что можно и так найти в сети. Дело в том, что мне пришлось писать очень графически измененное приложение. Большенство элементов были очень изменены. Первое что пришло в голову, было ошибочно. Решил написать собственный дочерний компонент, от того же ListView, к примеру, и там понеслось: onDraw, dispatchDraw и др. Так мне показалось мало, еще и вбил конкретные значения в пикселях при отрисовке какого-либо элемента.

Это то, как не надо делать. Даже если нет выхода, пытайтесь до последнего не создавать компонент, а выкручиваться layout’ами. Намного лучше написать BaseAdapter для ListView, к примеру, где загружать другой layout и его контроллировать. Если выхода нет, то все значения для UI в пикселях, выносить в свойства компонента (attrs), которые будет передаваться при описании компонента в xml. Сами значения в xml, так же не указывать на прямую, а использовать dimensions, ссылки.

Давайте рассмотрим, что я подразумиваю под attrs и dimensions.

Attrs

Android предоставляет неявный способ расширять ваши нестандартные компоненты дополнительными свойствами. Потребуется создать attrs.xml файл в /res/values. Вполне вероятно, назвать данный файл можно как угодно по другому, но это название я считаю стандартом.

Содержание attrs.xml вполне доступно для чтение человеком. Давайте рассмотрим простой пример:

Resources встречается постоянно, используется для хранения каких-либо ресурсов и впоследствии доступен в коде Java через статический класс R пакета приложения. К примеру наше объявляение доступно через R.styleable.MyExampleView. По моим наблюдениям и тому, что приходилось использовать, есть такой список format (тип свойства):

  • dimension — может быть значение типа 10px, 10dip или ссылка на dimen/[имя значения]
  • integer — может быть значение типа 10, 5, 2. Так же думаю, что и ссылка может сработать
  • string — просто текстовое значение типа «Hello World» или ссылка на string/[имя значения]
  • reference — ссылка на @drawable к примеру, что в свою очередь может быть @drawable, color или что-то другое

Допустим у нас есть собственный класс, наследник View: com.android.example.view.MyExampleView. Опишем его просто:

Таким образом мы создали собственный элемент управления, который можно настраивать прямо из xml, и данный метод очень гибок, т.к. отсутствует привязка к определенным значениям в коде, кроме по умолчанию. Чтобы создать элемент, напишим в layout:

Dimensions

В идеальном мире все значения выносить в /res/values/dimensions.xml в формате: [значение]dp, после чего использовать в xml или коде через ссылку на dimen/[имя]. Я советую, как и поступаю на данный момент, выносить размер текста, главных элементов приложения, к примеру смещения каких-то панелей, padding/margin по умолчанию и др. Не выносить значения для каких-то конкретных элементов, например в одном диалоге кнопка от кнопки на расстоянии в 10 пикселей.

Такой подход поможет быть уверенным, что в приложении весь текст выглядит стандартизированно, например большие заголовки в 30 пикселей, средние в 24, а обычный текст в 16. Если не понравилось — меняем только в одном месте.

В принципе останавливаться на этом долго не стоит, но есть один момент. Недавно Google обновила плагин Android для Eclipse, соответственно, и теперь там есть такой зверь Lint. Так вот, он мне все время подмигивал и убеждал, что надо бы использовать dp, а не px, и расписывал еще по какой такой причине. Я и поверил, сделал. А теперь давайте вспомним о Density. Насколько я понимаю, это значение показывает насколько плотно расположены пиксели друг к другу. Т.е. на пример у вас есть устройство в разрешением в 800×600. Но дело в том, что одно устройство имеет 800 * 600 пикселей, в другое 2 * 800 * 2 * 600. Думаю уловили разницу? Т.е. разрешение одно, но качество и соответственно плотность пикселей совершенно другая. И именно в этом скрывается подвох Lint. После миграции на устройство с большей плотностью, используя dp, у меня все элементы поехали, а текст стал совершенно других размеров (на взгляд).

Читайте также:  Андроид для взлома страницы

Как оказалось, используй я с самого начала px везде и игнорируй предупреждения Lint, я бы не тратил дополнительное время на переписывание dp на px.

Colors

Цвета в Android так же могут (должны) быть представлены в xml в форматах: argb, rgb. К примеру, белый цвет:

  • rgb = #fff. Это не #0f0f0f или #f0f0f0 — это сокращенная форма, в итоге имеем непрозрачный белый цвет #ffffffff
  • argb = #ffff. На подобии предыдущего, только включая alpha составляющую
  • rgb = #ffffff. Полная форма rgb
  • argb = #ffffffff. Полная форма argb

В принципе очень схоже на dimensions правила, обычно располагается в /res/values/colors.xml, так же в resources теге. Выносить в colors стоит цвета которые используются для стандартизации полного UI, а не каких-либо мелких деталей одного из элементов. Так сказать золотая серидина между параноей и ленью.

Надеюсь кому то эти заметки сохранят время или помогут в чем-то более глубоко разобраться.

UPD:
Спасибо sdfsdhgjkbmnmxc и andreich за указание ошибок в тексте.

Источник

Использовать declare styleable для установки типа ввода пользовательских компонентов

У меня есть CompositeComponent (EditText + ImageButton). При нажатии на кнопку содержимое edittext будет очищено. Он работает нормально. Моя проблема заключается в настройке атрибутов для моего компонента. Я использую declare-styleable для установки атрибутов для моего компонента.

Я успешно устанавливаю minLines, maxLines и textColor.

Как я могу установить inputtype на свой компонент через xml.

И использование mycomponent в main_layout.xml:

Обычное использование Edittext:

Я не могу использовать ENUM в своем атрибуте .xml. Как обращаться с android:inputType=»numberSigned» в моем cet:InputType ?

РЕДАКТИРОВАТЬ:

Вот как я назначаю свойства в моем ClearableEditText.java

Вы можете видеть, что нет никакой проблемы с назначением свойства inputType для редактированияText.

Допустим, у вас есть пользовательский вид с именем InputView, который не является TextView (скажем, RelativeLayout).

В вашем attrs.xml:

В макете xml, где вы хотите включить InputView:

Внутри пользовательского класса вы можете извлекать атрибуты как обычно:

Используйте это в своем attr.xml для предложений. Использование флагов дает предложения в xml при использовании edittext. Custom: inputType = «text», и он предложит вам типы сложения. Для добавления дополнительных флагов используйте эту ссылку. Посетите страницу https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/attrs.xml.

Мне удалось сделать это с сырой стоимостью int: я думаю, что это не очень хорошая практика. Я могу назначить необработанные значения следующим образом: cet:InputType=»2″

Источник

Объявление атрибутов стиля в Android

Существует очень маленькая документация об declare-styleable теге, с помощью которого мы можем объявлять пользовательские стили для компонентов. Я нашел этот список допустимых значений для атрибута format тега attr . Хотя это хорошо, насколько это возможно, это не объясняет, как использовать некоторые из этих значений. Просмотрев attr.xml (источник Android для стандартных атрибутов), я обнаружил, что вы можете делать такие вещи, как:

Атрибут format очевидно, может быть установлен на комбинацию значений. Предположительно format атрибут format помогает синтаксическому анализатору интерпретировать фактическое значение стиля. Затем я обнаружил это в attr.xml:

Кажется, что оба они объявляют набор допустимых значений для указанного стиля.

Поэтому у меня есть два вопроса:

Здесь есть этот вопрос: определение пользовательских attrs с некоторой информацией, но не много.

И этот пост . Он имеет хорошую информацию о флажках и перечислениях:

Пользовательские флаги атрибутов XML

Флаги являются особыми типами атрибутов, поскольку они допускают только очень небольшое подмножество значений, а именно те, которые определены под тегом атрибута. Флаги определяются атрибутом «name» и атрибутом «value». Имена должны быть уникальными в пределах этого типа атрибута, но значения не обязательно должны быть. Именно по этой причине во время эволюции платформы Android у нас были «fill_parent» и «match_parent», как отображение в одно и то же поведение. Их значения были одинаковыми.

Читайте также:  Аналог мифит для андроид

Атрибут name сопоставляется с именем, используемым в месте значения в XML-макете и не требует префикса пространства имен. Следовательно, для «tilingMode» выше я выбрал «center» как значение атрибута. Я мог бы так же легко выбрать «растянутый» или «повторяющийся», но не более того. Даже подмена фактических значений не была бы разрешена.

Атрибут value должен быть целым числом. Выбор шестнадцатеричного или стандартного представления чисел зависит от вас. В коде Android есть несколько мест, в которых оба используются, и компилятор Android тоже рад принять его.

Пользовательские списки атрибутов XML

Перечисления используются почти так же, как флаги с одним условием, они могут быть взаимозаменяемы с целыми числами. Под капотом Enums и Integer сопоставляются с одним и тем же типом данных, а именно с Integer. При появлении в определении атрибута с помощью целых чисел Enums служат для предотвращения «магических чисел», которые всегда плохие. Вот почему вы можете иметь «android: layout_width» с размером, целым числом или с именем «fill_parent».

Предположим, что я создаю настраиваемый атрибут «layout_scroll_height», который принимает либо целое число, либо строку «scroll_to_top». Для этого я бы добавил атрибут формата «целочисленный» и следую за ним с перечислением:

Одно из условий при использовании Enums таким образом заключается в том, что разработчик, использующий ваш собственный вид, может целенаправленно поместить значение «-1» в параметры макета. Это вызвало бы специальную логику case «scroll_to_top». Такое неожиданное (или ожидаемое) поведение могло бы быстро отнести вашу библиотеку в кучу «устаревшего кода», если значения Enum были выбраны плохо.

Как я вижу, реальные значения, которые вы можете добавить в реальность к атрибуту, ограничены тем, что вы можете получить от него. Проверьте ссылку класса AttributeSet здесь для получения дополнительных подсказок.

Вы можете получить:

  • getAttributeBooleanValue ( getAttributeBooleanValue ),
  • getAttributeFloatValue ( getAttributeFloatValue ),
  • Ints ( getAttributeIntValue ),
  • Ints (как getAttributeUnsignedIntValue ),
  • И строки ( getAttributeValue )

Ответ @Aleadam очень полезен, но imho он опускает одно существенное различие между enum и flag . Первое предназначено для нас, чтобы выбрать одно и только одно значение, когда мы назначаем соответствующий атрибут для некоторого представления. Однако значения последнего могут быть объединены, используя побитовый оператор OR.

Например, в res/values/attr.xml

В res/layout/mylayout.xml мы можем теперь делать

Таким образом, перечисление выбирает одно из его возможных значений, а флаги могут комбинироваться. Численные значения должны отражать эту разницу, обычно вам нужно, чтобы последовательность была 0,1,2,3. для перечислений (для использования в качестве индексов массива, скажем) и флажков, чтобы идти 1,2,4,8. поэтому они могут быть независимо добавлены или удалены, используя побитовое ИЛИ | Для объединения флагов.

Мы могли бы явно определить «мета-флаги» со значениями, которые не являются степенью 2, и таким образом ввести вид сокращений для общих комбинаций. Например, если бы мы включили это в нашу декларацию myflags

myflags=»three» мы могли бы написать myflags=»three» вместо myflags=»one|two» , для полностью идентичных результатов, как 3 == 1|2 .

Лично мне нравится всегда включать

Который позволит мне отключить или установить все флаги сразу.

Более тонко, может быть, один флаг подразумевается другим. Итак, в нашем примере предположим, что установленный флаг eight должен принудительно установить four флага (если он еще не был). Затем мы могли бы повторно определить eight чтобы предварительно включить four флага,

Наконец, если вы объявляете атрибуты в проекте библиотеки, но хотите применить их в макетах другого проекта (в зависимости от lib), вам нужно использовать префикс пространства имен, который вы должны связать в корневом элементе XML. Например,

Источник

Оцените статью