Перейти к содержимому

Как поставить максимальное количество символов android studio

  • автор:

Возможно ли задать размер TextView в символах?

Мне нужно отобразить ListView, элементами которого являются LinearLayout’ы с несколькими вложенными объектами, первым из которых является textView со строкой, максимальная длина которой не превышает 12 символов. Можно ли выровнять длины listview с разных строк по размеру, который займёт строка максимальной длины?

  • Вопрос задан более трёх лет назад
  • 3832 просмотра

Комментировать
Решения вопроса 1

Да можно, у TextView есть свойство «ems», соответсвтвенно, вы можете указать minEms=»12″ и maxEms=»12″ и ширина TextView будет равна 12 символам не зависимо от количества символов в нем

Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
Ответы на вопрос 1

Нет. Основная причина: размер символов зависит от размера шрифта. А все остальные размеры вычисляются с помощью обычной математики.

ПС: Чушь написал. Artem_zin прав. Вот описалово.

Ответ написан более трёх лет назад
IDOL1234 @IDOL1234 Автор вопроса

Я пытался получить при помощи Paint paint = new Paint(); maxWidth = paint.measureText(«LONG WHITE SPACE FOR BARCODE»); , но почему-то ширина получалась недостаточной. Спасибо за ссылку.

Ваш ответ на вопрос

Войдите, чтобы написать ответ

android

  • Android
  • +1 ещё

Как корректно реализовать Базу данных в приложении на Андроид?

  • 1 подписчик
  • 7 часов назад
  • 22 просмотра

Изменение свойств виртуальных устройств Android

Android Device Manager поддерживает изменение свойств профиля для отдельного виртуального устройства Android. На экранах Создание устройства и Изменение устройства в первом столбце перечислены свойства виртуального устройства, а во втором — соответствующие значения для них (как показано в данном примере):

Пример экрана нового устройства

При выборе свойства справа отображается его подробное описание. Вы можете изменить свойства профиля оборудования и свойства AVD. Свойства профиля оборудования (например, hw.ramSize и hw.accelerometer ) описывают физические характеристики эмулируемого устройства. К таким характеристикам относится размер экрана, объем доступной оперативной памяти, состояние работы акселерометра. Свойства AVD описывают работу AVD. Например, в свойствах AVD можно указать, как AVD использует видеоадаптер вашего компьютера разработчика для отрисовки.

Ниже описано, как можно изменить свойства:

  • Чтобы изменить логическое свойство, щелкните флажок справа от него: Изменение логического свойства
  • Чтобы изменить свойство перечисления (перечисление), щелкните стрелку вниз справа от свойства и выберите новое значение. Изменение свойства перечисления
  • Чтобы изменить строковое или целочисленное свойство, дважды щелкните текущую строку или целое число в столбце значения и введите новое значение. Изменение целочисленного свойства

Android Device Manager в macOS

Android Device Manager поддерживает изменение свойств профиля для отдельного виртуального устройства Android. На экранах Создание устройства и Изменение устройства в первом столбце перечислены свойства виртуального устройства, а во втором — соответствующие значения для них (как показано в данном примере):

Пример экрана нового устройства

При выборе свойства справа отображается его подробное описание. Вы можете изменить свойства профиля оборудования и свойства AVD. Свойства профиля оборудования (например, hw.ramSize и hw.accelerometer ) описывают физические характеристики эмулируемого устройства. К таким характеристикам относится размер экрана, объем доступной оперативной памяти, состояние работы акселерометра. Свойства AVD описывают работу AVD. Например, в свойствах AVD можно указать, как AVD использует видеоадаптер вашего компьютера разработчика для отрисовки.

Ниже описано, как можно изменить свойства:

  • Чтобы изменить логическое свойство, щелкните флажок справа от него: Изменение логического свойства
  • Чтобы изменить свойство перечисления (перечисление), щелкните раскрывающееся меню справа от свойства и выберите новое значение. Изменение свойства перечисления
  • Чтобы изменить строковое или целочисленное свойство, дважды щелкните текущую строку или целое число в столбце значения и введите новое значение. Изменение целочисленного свойства

Следующая таблица содержит подробное описание свойств, указанных на экранах Новое устройство и Device Editor (Редактор устройств):

Свойство Описание Параметры
abi.type Тип ABI указывает тип ABI (двоичный интерфейс приложений) для эмулированного устройства. Параметр x86 предназначен для набора инструкций, который обычно называют «x86» или «IA-32». Параметр x86_64 предназначен для 64-разрядного набора инструкций x86. Вариант armeabi-v7a обозначает набор инструкций ARM с расширениями v7-a ARM. Вариант arm64-v8a обозначает набор инструкций ARM, который поддерживает AArch64. x86, x86_64, armeabi-v7a, arm64-v8a
disk.cachePartition Раздел кэша — определяет, использует ли эмулируемое устройство раздел /cache. Раздел /cache (изначально этот раздел пуст) предназначен для хранения часто используемых данных и компонентов приложений Android. Если здесь выбрано значение no, эмулятор не будет использовать раздел /cache и все остальные параметры disk.cache будут игнорироваться. yes (Да), no (Нет)
disk.cachePartition.path Путь к разделу кэша — определяет файл с образом раздела кэша на компьютере разработки. Эмулятор использует этот файл в качестве раздела /cahce. Здесь можно указать абсолютный путь или путь относительно каталога данных, используемого эмулятором. Если значение не задано, эмулятор создает на компьютере разработки пустой временный файл с именем cache.img. Если заданный файл не существует, он будет создан с пустым содержимым. Этот параметр игнорируется, если параметр disk.cachePartition имеет значение no.
disk.cachePartition.size Размер секции кэша — размер файла раздела кэша (в байтах). Обычно этот параметр использовать не нужно, если приложение не будет скачивать огромные файлы, превышающие стандартный размер кэша 66 мегабайт. Этот параметр игнорируется, если параметр disk.cachePartition имеет значение no. Если в качестве значения используется целое число, оно указывает размер в байтах. Также вы можете указать размер в килобайтах, мегабайтах или гигабайтах, добавив к значению обозначение K, M или G соответственно. Минимальный размер — 9 МЛН, а максимальный — 1023G.
disk.dataPartition.initPath Начальный путь к разделу данных — указывает исходные данные для секции данных. После очистки пользовательских данных эмулятор копирует в каталог пользовательских данных содержимое указанного файла (по умолчанию это файл userdata-qemu.img), а не использует userdata.img в качестве исходных данных.
disk.dataPartition.path Путь к разделу данных — указывает файл для раздела пользовательских данных. Чтобы настроить сохраняемый файл пользовательских данных, введите имя файла и путь к нему на компьютере разработки. Если этот файл не существует, эмулятор создает образ из файла по умолчанию userdata.img, сохраняет его с тем именем, которое указано в параметре disk.dataPartition.path , и при завершении работы сохраняет в этом файле все данные пользователя. Если путь не указан, файл по умолчанию получает имя userdata-qemu.img. Специальное значение заставляет эмулятор создать и использовать временный файл. Если файл данных disk.dataPartition.initPath задан, его содержимое будет скопировано в файл disk.dataPartition.path во время загрузки. Обратите внимание, что этот параметр нельзя оставлять пустым.
disk.dataPartition.size Размер секции данных — указывает размер секции пользовательских данных в байтах. Если в качестве значения используется целое число, оно указывает размер в байтах. Также вы можете указать размер в килобайтах, мегабайтах или гигабайтах, добавив к значению обозначение K, M или G соответственно. Минимальный размер — 9 МЛН, а максимальный — 1023G.
disk.ramdisk.path Путь к виртуальному диску — путь к образу загрузочного раздела (виртуальному диску). Образ виртуального диска является подмножеством системных образов, который загружается ядром перед подключением образа системы. Образ виртуального диска обычно содержит двоичные файлы и скрипты инициализации для процессов загрузки. Если этот параметр не указан, по умолчанию используется файл ramdisk.img в системном каталоге эмулятора.
disk.snapStorage.path Путь к хранилищу моментального снимка — путь к файла хранилища моментальных снимков, в котором сохраняются моментальные снимки. В этот файл будет сохранены все моментальные снимки, созданные во время выполнения. При работе эмулятора можно восстановить только те моментальные снимки, которые сохраняются в этот файл. Если этот параметр не указан, по умолчанию используется файл snapshots.img в каталоге данных эмулятора.
disk.systemPartition.initPath Путь к системному разделу init — путь к копии файла системного образа, доступной только для чтения. Именно в этом разделе хранятся системные библиотеки и данные, относящиеся к уровню API, и все их вариации. Если этот путь не указан, по умолчанию используется файл system.img в системном каталоге эмулятора.
disk.systemPartition.path Путь к системному разделу — путь к образу системного раздела, доступному для чтения и записи. Если этот путь не задан, будет создан временный файл, который затем инициализируется содержимым файла, заданного параметром disk.systemPartition.initPath .
disk.systemPartition.size Размер системного раздела — идеальный размер системного раздела (в байтах). Этот размер не учитывается, если фактический образ системного раздела больше указанного здесь значения. В противном случае он ограничивает максимальный размер файла для системного раздела. Если в качестве значения используется целое число, оно указывает размер в байтах. Также вы можете указать размер в килобайтах, мегабайтах или гигабайтах, добавив к значению обозначение K, M или G соответственно. Минимальный размер — 9 МЛН, а максимальный — 1023G.
hw.accelerometer Акселерометр — определяет, содержит ли эмулируемое устройство датчик акселерометра. Акселерометр помогает устройству ориентироваться в пространстве (например, используется для автоматического поворота экрана). Акселерометр передает ускорение, действующее на устройство по трем осям датчика. yes (Да), no (Нет)
hw.audioInput Поддержка записи звука — определяет, умеет ли эмулируемое устройство записывать звук. yes (Да), no (Нет)
hw.audioOutput Поддержка воспроизведения звука — определяет, умеет ли эмулируемое устройство воспроизводить звук. yes (Да), no (Нет)
hw.battery Поддержка аккумулятора — определяет, умеет ли эмулируемое устройство работать от аккумулятора. yes (Да), no (Нет)
hw.camera Поддержка камеры — определяет, есть ли камера на эмулируемом устройстве. yes (Да), no (Нет)
hw.camera.back Задняя камера — настраивает заднюю камеру устройства (ту, которая направлена в другую сторону от пользователя). Если вы используете веб-камеру на компьютере разработчика для имитации задней камеры на эмулируемом устройстве, присвойте этому параметру значение webcamn, где n обозначает порядковый номер камеры в системе (если есть только одна веб-камера, укажите webcam0). Если задана эмуляция, эмулятор имитирует камеру программным способом. Чтобы отключить заднюю камеру, задайте этому параметру значение none. Если вы включите заднюю камеру, обязательно включите параметр hw.camera . emulated (эмулируется), none (нет), webcam0 (веб-камера 0)
hw.camera.front Передняя камера — настраивает переднюю камеру устройства (ту, которая направлена на пользователя). Если вы используете веб-камеру на компьютере разработчика для имитации передней камеры на эмулируемом устройстве, присвойте этому параметру значение webcamn, где n обозначает порядковый номер камеры в системе (если есть только одна веб-камера, укажите webcam0). Если задана эмуляция, эмулятор имитирует камеру программным способом. Чтобы отключить переднюю камеру, задайте этому параметру значение none. Если вы включите переднюю камеру, обязательно включите параметр hw.camera . emulated (эмулируется), none (нет), webcam0 (веб-камера 0)
hw.camera.maxHorizontalPixels Максимальное количество пикселей камеры по горизонтали — настраивает максимальное разрешение (в пикселях) по горизонтали для камеры эмулированного устройства.
hw.camera.maxVerticalPixels Максимальное количество пикселей камеры по вертикали — настраивает максимальное разрешение (в пикселях) по вертикали для камеры эмулированного устройства.
hw.cpu.arch Архитектура ЦП — архитектура ЦП, которую будет эмулировать виртуальное устройство. Если вы используете Intel HAXM для аппаратного ускорения, выберите x86 для 32-разрядного процессора. Выберите x86_64, если вам нужно 64-разрядное устройство с ускорением HAXM. (Обязательно установите соответствующий образ системы Intel x86 в диспетчере пакетов SDK: например, Intel x86 Atom или Intel x86 Atom_64.) Чтобы имитировать ЦП ARM, выберите arm для 32-разрядной версии или arm64 для 64-разрядного ЦП ARM. Учитывайте, что виртуальные устройства на основе ARM работают гораздо медленнее, чем на основе x86, поскольку для ARM не поддерживается аппаратное ускорение. x86, x86_64, arm, arm64
hw.cpu.model Модель ЦП — это значение обычно не задано (если оно не задано явным образом, ему будет присвоено значение, которое является производным от hw.cpu.arch ). Но для экспериментов вы можете присвоить ему конкретную строку, значение которой зависит от эмулятора.
hw.dPad Клавиши DPad — определяет, поддерживает ли эмулированное устройство навигационное устройство (DPad). Обычно DPad имеет четыре клавиши для выбора направления. yes (Да), no (Нет)
hw.gps Поддержка GPS — определяет наличие приемника GPS (глобальной системы позиционирования) на эмулированном устройстве. yes (Да), no (Нет)
hw.gpu.enabled Эмуляция GPU — определяет поддержку эмуляции GPU для эмулированного устройства. Если включена эмуляция GPU, для отрисовки 2D и 3D графики на экране применяется Open GL для встраиваемых систем (OpenGL ES). Способ реализации для эмуляции GPU определяется связанным параметром «Режим эмуляции GPU». yes (Да), no (Нет)
hw.gpu.mode Режим эмуляции GPU — определяет способ реализации для эмуляции GPU в эмуляторе устройства. Если выбран вариант auto, эмулятор самостоятельно выберет режимы программного и аппаратного ускорения, исходя из настроек компьютера разработки. Если выбран вариант host, эмулятор будет использовать графический процессор компьютера разработки для эмуляции GPU, чтобы ускорять отображение содержимого. Если установленный GPU не совместим с эмулятором, в Windows можно попробовать вариант angle вместо host. Режим angle использует DirectX и обеспечивает примерно такую же производительность, как вариант host. Если выбран вариант mesa, эмулятор будет использовать программную библиотеку Mesa 3D для отображения графики. Выберите вариант mesa, если работа с графическим процессором компьютера разработки вызывает какие-либо проблемы. Режим swiftshader позволяет отображать графические элементы программным способом с несколько меньшей производительностью по сравнению с GPU компьютера. Вариант off (отключение эмуляции графического оборудования) мы использовать не рекомендуем, так как некоторые элементы в этом режиме воспроизводятся неправильно. auto (автоматически), host (компьютер), mesa, angle, swiftshader, off (отключено)
hw.gsmModem Поддержка модема GSM — определяет наличие на эмулируемом устройстве модема, который поддерживает систему радиосвязи GSM (глобальная система связи для мобильных устройств). yes (Да), no (Нет)
hw.initialOrientation Начальная ориентация экрана — настраивает начальную ориентацию экрана на эмулированном устройстве (книжный или альбомный режим). В книжной ориентации высота экрана больше, чем ширина. В альбомной ориентации ширина экрана больше, чем высота. После запуска эмулированного устройства вы можете изменить на нем ориентацию, если оба этих режима поддерживает профиль устройства. portrait (книжная), landscape (альбомная)
hw.keyboard Поддержка клавиатуры — определяет, поддерживает ли эмулированное устройство клавиатуру QWERTY. yes (Да), no (Нет)
hw.keyboard.charmap Имя таблицы символов для клавиатуры — имя таблицы символов оборудования этого устройства. Примечание. Здесь следует всегда использовать значение по умолчанию qwerty2, если в образ системы не внесены необходимые изменения. Это имя отправляется в ядро во время загрузки. Если указать неправильное имя, виртуальное устройство будет недоступно для использования.
hw.keyboard.lid Поддержка крышки клавиатуры — если включена поддержка клавиатуры, этот параметр определяет, можно ли на устройстве закрыть/спрятать и открыть/показать клавиатуру QWERTY. Этот параметр игнорируется, если для hw.keyboard указано значение false. Примечание: по умолчанию устанавливается значение false, если эмулируемое устройство предназначено для API уровня 12 или выше. yes (Да), no (Нет)
hw.lcd.backlight Подсветка ЖК-экрана — определяет, будет ли эмулированное устройство управлять подсветкой ЖК-экрана. yes (Да), no (Нет)
hw.lcd.density Плотность ЖК-экрана — плотность ЖК-экрана для эмулированного устройства, измеряется в виртуальных пикселях (dp), размер которых не зависит от плотности пикселей. Если выбрано значение 160 точек, каждый виртуальный пиксель (dp) строго соответствует одному физическому пикселю. Во время выполнения Android масштабирует все ресурсы,используя это значение, чтобы правильно отображать их на экране. 120, 160, 240, 213, 320
hw.lcd.depth Глубина цвета ЖК-экран — глубина цвета в битах для буфера кадров эмулированного устройства, в котором сохраняется изображение для отображения на ЖК-экране. Здесь допускаются значения 16 бит (65 536 возможных цветов) или 32 бит (16 777 216 цветов с поддержкой прозрачности). Если выбрано значение 32 бита, эмулятор может работать несколько медленнее, но зато с большей точностью цветопередачи. 16, 32
hw.lcd.height Высота ЖК-экрана в пикселях — количество пикселей по вертикали для ЖК-экрана эмулированного устройства.
hw.lcd.width Ширина ЖК-экрана в пикселях — количество пикселей по горизонтали для ЖК-экрана эмулированного устройства.
hw.mainKeys Аппаратные клавиши «назад» и «домой» — определяет поддержку аппаратных клавиш «назад» и «домой» для эмулированного устройства. Здесь вы можете задать значение Да, если клавиши реализованы только в программном обеспечении. Если для hw.mainKeys указать значение yes, эмулятор не отображает на экране кнопки навигации, но для их «нажатия» можно использовать боковую панель эмулятора. yes (Да), no (Нет)
hw.ramSize Объем оперативной памяти на устройстве — определяет объем физической памяти на эмулированном устройстве в мегабайтах. Значение по умолчанию этого параметра зависит от размера экрана или версии обложки. Если вы увеличите этот размер, эмуляция будет работать быстрее, но для этого потребуется больше ресурсов на компьютере разработки.
hw.screen Тип сенсорного экрана — определяет тип экрана для эмулированного устройства. В режиме multi-touch экран отслеживает касание двумя или более пальцами. В режиме touch сенсорный экран поддерживает только события касания одним пальцем. В режиме no-touch экран не отслеживает события касания. touch (сенсорный), multi-touch (мультисенсорный), no-touch (не сенсорный)
hw.sdCard Поддержка карты SD — определяет поддержку событий вставки и удаления карты SD (Secure Digital) на эмулированном устройстве. Эмулятор использует подключаемые образы дисков, хранящиеся на компьютере разработчика, для имитации разделов на обычных картах SD (см. также параметр hw.sdCard.path). yes (Да), no (Нет)
sdcard.size Размер SDCard — указывает размер виртуального SD-файла карта в расположении, указанном параметром hw.sdCard.path . на устройстве (в байтах). Если в качестве значения используется целое число, оно указывает размер в байтах. Также вы можете указать размер в килобайтах, мегабайтах или гигабайтах, добавив к значению обозначение K, M или G соответственно. Минимальный размер составляет 9 млн, а максимальный — 1023G.
hw.sdCard.path Путь к образу карты SD — задает имя файла с образом раздела карты SD и путь к нему на компьютере разработки. Например, в ОС Windows этот путь может иметь значение C:\sd\sdcard.img.
hw.sensors.magnetic_field Датчик магнитного поля — определяет поддержку датчика магнитного поля для эмулированного устройства. Датчик магнитного поля (магнитометр) сообщает напряженность окружающего магнитного поля по трем осям. Включите этот параметр, если вашему приложению нужны показания компаса. Например, приложение навигации может с помощью этого датчика определять, куда смотрит пользователь. yes (Да), no (Нет)
hw.sensors.orientation Ориентация датчика — определяет наличие датчика ориентации на эмулированном устройстве. Датчик ориентации измеряет угол поворота для корпуса устройства по трем физическим осям (x, y, z). Обратите внимание, что датчик ориентации объявлен устаревшим с версии ОС Android 2.2 (API уровня 8). yes (Да), no (Нет)
hw.sensors.proximity Датчик приближения — определяет поддержку датчика приближения для эмулированного устройства. Этот датчик измеряет расстояния до ближайшего объекта от экрана устройства. Обычно с помощью этого датчика приложения определяют, что человек держит мобильный телефон возле уха. yes (Да), no (Нет)
hw.sensors.temperature Датчик температуры — определяет поддержку датчика температуры для эмулированного устройства. Этот датчик измеряет температуру устройства в градусах Цельсия (° C). yes (Да), no (Нет)
hw.touchScreen Поддержка сенсорного экрана — определяет, поддерживает ли эмулированное устройство сенсорный экран. Сенсорный экран используется для прямого управления объектами, отображенными на экране. yes (Да), no (Нет)
hw.trackBall Поддержка шарового манипулятора — определяет, поддерживает ли эмулированное устройство трекбол. yes (Да), no (Нет)
hw.useext4 Поддержка файловой системы EXT4 — определяет поддержку файловой системы Linux EXT4 для разделов эмулированного устройства. В настоящее время тип файловой системы определяется автоматически, поэтому этот параметр считается устаревшим и не учитывается. нет
kernel.newDeviceNaming Новая схема именования устройств для ядра — указывает, что ядро устройства требует использовать новую схему именования устройств. Обычно этот режим требуется для ядер Linux 3.10 и более поздних версий. Установите значение автоопределение, чтобы эмулятор самостоятельно принимал решение об использовании новой схемы именования устройств. autodetect (автоопределение), yes (да), no (нет)
kernel.parameters Параметры ядра — указывает строку параметров загрузки для ядра Linux. По умолчанию этот параметр имеет пустое значение.
kernel.path Путь к ядру — определяет путь к ядру Linux. Если этот путь не указан, эмулятор по умолчанию ищет файл kernel-ranchu в своем системном каталоге.
kernel.supportsYaffs2 Поддержка разделов YAFFS2 — определяет, поддерживает ли ядро разделы с файловой системой YAFFS2. Обычно это требуется только для версий ядра меньше Linux 3.10. Установите значение автоопределение, чтобы эмулятор самостоятельно принимал решение о возможности подключения файловых систем YAFFS2. autodetect (автоопределение), yes (да), no (нет)
skin.name Имя обложки — имя для обложки эмулятора Android. Обложка — это набор файлов, которые описывают правила отображения для визуальных элементов и элементов управления. Эти правила определяют, как будет выглядеть окно AVD на компьютере разработки. От обложки зависят размер экрана, внешний вид кнопок и другие параметры оформления, но она никак не влияет на работу приложения.
skin.path Путь к обложке — путь к каталогу, который содержит файлы обложки, имя которой указано в параметре skin.name. В этом каталоге должны размещаться файлы макета hardware.ini и файлы изображений, используемых в обложке для элементов отображения.
skin.dynamic Динамическая обложка — определяет, является ли обложка динамической. Обложка эмулятора считается динамической, если эмулятору нужно создать обложку определенного размера на основе значений ширины и высоты экрана. нет

Дополнительные сведения об этих свойствах см. в разделе Свойства профиля оборудования.

Android. Как установить максимальную длину текста в EditText

Русский Українська

В статье будет рассмотрено два способа установки лимита на количество символов в EditText: с помощью разметки и с помощью программного кода.

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

 android:maxLength="16" 

Чтобы сделать это же в коде программы, необходимо выполнить следующий код:

 EditText editText = . ; int maxLength = 16; InputFilter[] FilterArray = new InputFilter[1]; FilterArray[0] = new InputFilter.LengthFilter(maxLength); editText.setFilters(FilterArray); 

Напишите первое сообщение!

Вы должны войти под своим аккаунтом чтобы оставлять комментарии

Популярное

Новое

Случайное

Категории

Архивы

  • Июль 2014 (3)
  • Июнь 2014 (3)
  • Октябрь 2012 (15)
  • Сентябрь 2012 (4)
  • Август 2012 (5)
  • Июль 2012 (4)
  • Июнь 2012 (22)
  • Май 2012 (24)
  • Апрель 2012 (23)
  • Март 2012 (16)
  • Февраль 2012 (42)
  • Январь 2012 (21)

При воспроизведении или цитировании статей, опубликованных на портале SEOstella.com, указания источника обязательно. Интернет-ресурсам запрещено цитировать и воспроизводить текстовые материалы портала SEOstella.com без указания активной гиперссылки на www.seostella.com, которая не является закрытой от индексирования поисковыми системами, а также вносить изменения в тексты без письменного разрешения редакции портала. Редакция портала может не разделять мнение автора и не несет ответственности за авторские материалы. Оценочные суждения не подлежат опровержению и доказыванию их правдивости. За достоверность и содержание рекламы ответственность несет рекламодатель.

Copyright © 2012-2024 SEOstella.com Все права защищены. Главная Новости Статьи Инструменты Контакты

Пользовательский интерфейс. View, основные атрибуты

Любое приложение отображает пользователю графический интерфейс. На картинке ниже вы можете увидеть примеры текстовых элементов ( TextView ), кнопок ( Button ), картинок ( ImageView ).

Пользовательский интерфейс представлен layout файлом (рус. Макетом), который создаётся, используя язык разметки XML. Макет определяет структуру пользовательского интерфейса экрана. Все элементы макета построены с использованием иерархии объектов View и ViewGroup . View – компонент, который пользователь может видеть и взаимодействовать с ним. В то время как ViewGroup является невидимым контейнером, который определяет структуру макета, как показано на рисунке.

Объекты View обычно называют «виджетами». Они могут быть представлены одним из классов-наследников, таких как Button , TextView , ImageView . Объекты ViewGroup обычно называют «контейнерами». Они определяют, как именно будут располагаться элементы внутри экрана. Подробнее с ViewGroup мы познакомимся в следующих уроках.

Вы можете работать с макетами двумя способами:

  • Объявлять элементы пользовательского интерфейса в XML коде. Android предоставляет простой XML файл, в котором можно добавлять разные View и ViewGroup вручную. Вы также можете использовать редактор макетов Android Studio, чтобы создать свой XML-макет, не заглядывая в XML код.
  • Создавать элементы макета во время выполнения программы из Java кода. Приложение может создавать объекты View и ViewGroup (и управлять их свойствами) программно.

В этом уроке мы подробнее будем рассматривать именно первый вариант. Откройте файл activity_main.xml . Для ознакомления с синтаксисом языка XML мы будем вносить изменения в этот файл.

XML синтаксис

XML – язык разметки, определяющий теги (элементы) и их атрибуты. Язык очень похож на HTML. Давайте разберём на примере.

LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"> LinearLayout>

Тег ограничивается скобками < >. Название тега в данном случае – LinearLayout . Всё, что находится между скобками – называется атрибутами. В примере два атрибута:

  • android:layout_width=»match_parent»
  • android:layout_height=»match_parent»

Атрибуты состоят из названия и значения, которые разделены символом = , причём значение атрибута всегда пишется в кавычках. У атрибута android:layout_width=»match_parent» название – android:layout_width , а значение – match_parent .

После открытия тега, его обязательно надо закрывать. Это можно сделать используя конструкцию (в примере – ).

У элемента могут быть вложенные элементы:

LinearLayout android:layout_height="match_parent" android:layout_width="match_parent"> TextView android:layout_height="wrap_content" android:layout_width="wrap_content"> TextView> LinearLayout>

Если у какого-то тега нет вложенных элементов, то лучше сократить закрывающийся тег, используя конструкцию . Обратите внимание на тег TextView :

LinearLayout android:layout_height="match_parent" android:layout_width="match_parent"> TextView android:layout_height="wrap_content" android:layout_width="wrap_content"/> LinearLayout>

Пример макета

Layout должен содержать только один корневой элемент, который должен быть объектом View или ViewGroup (обычно используют ViewGroup ). После того, как вы определили корневой элемент, вы можете добавить дополнительные объекты в качестве дочерних элементов, чтобы постепенно создавать пользовательский интерфейс. Давайте изменим файл activity_main.xml . Например, вот код XML-макета, который использует контейнер LinearLayout в качестве корневого элемента и два виджета внутри него: TextView и Button .

xml version="1.0" encoding="utf-8"?> LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This is TextView"/> Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This is Button"/> LinearLayout>

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

Связь XML и Java кода

Когда мы запускаем приложение, каждый файл макета XML компилируется в ресурс View . Связь XML файла и Activity происходит в методе onCreate класса MainActivity . Этот код также сгенерировала Android Studio при создании Activity .

public class MainActivity extends AppCompatActivity < @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); > >

Связь происходит при вызове метода setContentView(R.layout.activity_main) . Обращаться к layout файлу нужно в виде R.layout.имя_файла . Это связано с внутренним хранением ресурс файлов в Android системе. В нашем случае файл по умолчанию называется activity_main.xml , поэтому указываем R.layout.activity_main (постфикс xml опускается).

Метод onCreate() вызывается Android системой во время загрузки приложения (эту тему рассмотрим подробнее в следующих уроках).

XML Атрибуты

Каждый объект View и ViewGroup поддерживает множество атрибутов XML.

TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="30sp" android:text="This is TextView" />

Вы можете заметить, что в названии атрибутов есть префикс android . Этот префикс называют пространством имён (англ. namespace). В данном случае он означает, что атрибуты объявлены в библиотеке android . Также вы могли заметить, что у корневого элемента в макете обязательно указывается атрибут xmlns:android=»http://schemas.android.com/apk/res/android» . Это сделано для объявления пространства имён.

Некоторые атрибуты специфичны для конкретного элемента. Например, TextView поддерживает атрибут android:textSize (русс. размер текста). Атрибуты наследуются View объектами при расширении класса другого виджета. Некоторые из атрибутов являются общими для всех виджетов, поскольку они наследуются от корневого класса View (например, текст – android:text , ширина – android:layout_width , высота – android:layout_height , идентификатор – android:id ).

Атрибут android:text

Атрибут android:text отвечает за текст, который будет отображаться на экране:

xml version="1.0" encoding="utf-8"?> LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="30sp" android:text="Android is the best" /> LinearLayout>

Обязательные атрибуты android:layout_width, android:layout_height

У любого View компонента необходимо объявить атрибуты android:layout_width (русс. ширина макета), android:layout_height (русс. высота макета), иначе приложение не скомпилируется.

Существует три варианта указания ширины и высоты:

  • фиксированный размер в dp . Density-independent Pixel (сокр. dp) – это виртуальный пиксель, основанный на физической плотности экрана устройства. Android переводит это значение в соответствующее количество реальных пикселей для разных экранов.
  • wrap_content означает, что элемент занимает место, необходимое для отрисовки его содержимого.
  • match_parent означает, что элемент занимает столько же места, сколько и родительский элемент. Раньше вместо этого значения использовалось fill_parent . Но это устаревший вариант, поэтому не используйте его.

Создадим три TextView , чтобы показать эти значения:

LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> TextView android:layout_width="200dp" android:layout_height="wrap_content" android:background="#00F" android:text="Width 200dp" android:textColor="#FFF" android:textSize="25sp"/> TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:background="#00F" android:text="Width wrap_content" android:textColor="#FFF" android:textSize="25sp"/> TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:background="#00F" android:text="Width match_parent" android:textColor="#FFF" android:textSize="25sp"/> LinearLayout>

В данном случае при размере wrap_content TextView занимает столько же места, сколько и текст в нём. Вы можете изменить текст, чтобы убедиться, что размер текста и элемента TextView будут совпадать.

Вы могли заметить, что в примере мы использовали атрибуты android:background (русс. цвет фона), android:marginTop (русс. отступ сверху), android:textColor (русс. цвет текста), android:textSize (русс. размер текста) для наглядности. Сейчас мы рассмотрим эти атрибуты детальнее.

Атрибут android:textSize

Атрибут android:textSize отвечает за размер текста, как вы догадались. Разберём на примере:

xml version="1.0" encoding="utf-8"?> LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello world" android:textSize="30sp"/> LinearLayout>

Размер текста нужно указывать в единицах sp (Scale-independent Pixels). Отличие от dp состоит в том, что этот размер изменяется в зависимости от настроек размера шрифта в телефоне. В Android системе у пользователя есть возможность в настройках изменить шрифт в своём телефоне на крупный, средний или маленький. Чтобы текст в приложении автоматически изменился вместе с этой настройкой рекомендуется использовать единицы sp для текста.

Атрибут android:background

Атрибут android:background определяет фоновый цвет элемента. Когда вы указываете атрибут android:background , то видите точно, сколько места занимает элемент. Разберём на примере:

xml version="1.0" encoding="utf-8"?> LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> TextView android:layout_width="200dp" android:layout_height="200dp" android:background="#00FF00" android:text="Hello world" android:textSize="25sp"/> LinearLayout>

Давайте разберём запись android:background=»#00FF00″ . #00FF00 – простой способ закодировать любой цвет. Вы можете генерировать нужные цвета онлайн на этом сайте. Для самых любопытных ниже объяснение, как работает задание цветов.

Цвет задаётся в формате ARGB. Это аббревиатура расшифровывается, как Alpha Red Green Blue. Дело в том, что любой цвет можно получить из сочетания в разной степени 3 цветов: красного, зелёного и синего. Также цвета могут быть прозрачными, именно это обозначает слово Alpha.

Чтобы задать цвет мы указываем символ # и 3 байта в шестнадцатеричной системе, которые отвечают за каждый цвет. Первый байт отвечает за красный цвет, второй – за зелёный, третий – за синий.

В данном примере мы указали, что красного цвета будет 00 , зелёного цвета будет FF (максимальное значение), и синего будет 00 . Поэтому фон стал зелёным. Также можно не писать второе число, если оно такое же, как и первое. Т.е. мы можем записать этот же цвет : android:background=»#0F0″ . Если хотите узнать ещё больше о RGB формате, то читайте здесь.

Атрибут android:textColor

Атрибут android:textColor похож на атрибут android:background только он задаёт цвет текста:

xml version="1.0" encoding="utf-8"?> LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > TextView android:layout_width="200dp" android:layout_height="200dp" android:background="#0F0" android:textColor="#00F" android:textSize="25sp" android:text="Hello world" /> LinearLayout>

Атрибут android:textStyle

Атрибут android:textStyle отвечает за стиль текста. Его возможные значения:

  • normal – обычный текст (применяется по умолчанию, если вы не указали атрибут android:textStyle ).
  • bold – толстый.
  • italic – курсив.
xml version="1.0" encoding="utf-8"?> LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textStyle="normal" android:textSize="35sp" android:text="I'm normal" /> TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="35sp" android:textStyle="italic" android:text="I'm italic" /> TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textStyle="bold" android:textSize="35sp" android:text="I'm bold" /> LinearLayout>

Атрибут android:id

Атрибут android:id у View позволяет работать с ней из Java кода и ссылаться на эту View внутри макета. Покажем на примере работы с View элементом из Java кода:

xml version="1.0" encoding="utf-8"?> LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="35sp" android:text="Hello world"/> LinearLayout>

Символы @+id/ в начале строки указывают, что будет создан новый идентификатор. После этого следует новое имя ресурса, которое должно быть создано и добавлено к нашим ресурсам (в данном случае – text ). Из java кода к этому элементу можно будет обратиться с помощью вызова R.id.text .

public class MainActivity extends AppCompatActivity < @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView textView = findViewById(R.id.text); textView.setText("Text from java code"); > >

С помощью вызова метода findViewById(R.id.text) можно связать View из XML макета с Java объектом TextView . После этого можно вызывать любые методы, которые есть у данного объекта. Для примера мы вызвали метод setText() и указали текст Text from java code .

В результате увидим, что отобразился тот текст, который мы указали из Java кода:

Атрибуты android:padding, android:layout_margin

Рассмотрим атрибуты, которые задают отступы элементов:

  • android:padding (top, bottom, right | end, start | left)
  • android:layout_margin (top, bottom, right | end, start | left)

В xml коде они указываются так:

android:padding Отступ со всех сторон--> android:paddingTop android:paddingBottom android:paddingRight android:paddingEnd android:paddingLeft android:paddingStart android:layout_margin Отступ со всех сторон--> android:layout_marginTop android:layout_marginBottom android:layout_marginRight android:layout_marginEnd android:layout_marginLeft android:layout_marginStart

Параметры (top, bottom, right | end, start | left) означают, с какой стороны вы хотите сделать отступ. Параметры right | end , start | left означают практически одно и тоже. Только start, end добавляют поддержку для стран, в которых тексты читаются справа налево. Поэтому рекомендуется использовать их вместо значений left , right . Эти атрибуты поддерживаются с 17 версии устройств, значит мы можем их использовать (помните, что при создании проекта мы указали, что поддерживаем устройства 21 версии и выше).

Если указать padding , layout_margin без всякого параметра, то отступ будет сделан со всех сторон. Основное различие двух атрибутов состоит в том, что padding делает отступ внутри элемента, а layout_margin делает отступ снаружи. Пример:

xml version="1.0" encoding="utf-8"?> LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#00F" android:padding="10dp" android:text="TextView with padding" android:textColor="#FFF" android:textSize="35sp"/> TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="10dp" android:background="#00F" android:text="TextView with margin" android:textColor="#FFF" android:textSize="35sp"/> LinearLayout>

Можно сделать тоже самое, указывая отступы со всех сторон явно:

xml version="1.0" encoding="utf-8"?> LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> TextView android:paddingTop="10dp" android:paddingBottom="10dp" android:paddingEnd="10dp" android:paddingStart="10dp" android:background="#00F" android:textColor="#FFF" android:textSize="35sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView with padding"/> TextView android:layout_marginTop="10dp" android:layout_marginBottom="10dp" android:layout_marginEnd="10dp" android:layout_marginStart="10dp" android:background="#00F" android:textColor="#FFF" android:textSize="35sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView with margin"/> LinearLayout>

Атрибуты android:gravity, android:layout_gravity

Атрибуты android:gravity и android:layout_gravity отвечают за выравнивание. Ключевое отличие состоит в том, что android:gravity отвечает за выравнивание содержимого внутри элемента, а layout_gravity отвечает за выравнивание элемента относительно родительского контейнера. Разберём на примере:

LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> TextView android:layout_width="250dp" android:layout_height="wrap_content" android:background="#00F" android:textColor="#FFF" android:textSize="25sp" android:gravity="end" android:text="gravity end"/> TextView android:layout_width="250dp" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:background="#00F" android:textColor="#FFF" android:textSize="25sp" android:layout_gravity="end" android:text="layout_gravity end"/> LinearLayout>

В данном примере текст в первом TextView выровнен по правому краю, т.к. мы указали атрибут android:gravity=»end» . Второй элемент прижался к правой стороне родительского контейнера, потому что указан атрибут android:layout_gravity=»end» .

Также у этого атрибута могут быть другие значения, которые указывают, как именно выровнять элемент. Перечислим основные из них: top, bottom, start, end, center, center_horizontal, center_vertical

Различные значения можно комбинировать, используя символ | . Если хотим выровнять содержимое по правому нижнему углу, то можем использовать значение end|bottom .

LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> TextView android:layout_width="match_parent" android:layout_height="150dp" android:background="#00F" android:textColor="#FFF" android:textSize="35sp" android:gravity="end|bottom" android:text="Gravity end|bottom"/> LinearLayout>

Верите или нет, профессиональные разработчики не запоминают всё – поиск информации является ключевой частью работы. Поэтому не пытайтесь запомнить все View объекты и атрибуты сразу. Google сделал специальный словарь, в котором вы можете найти тот компонент, атрибут или класс, который вам необходим.

Заключение

Сегодня вы познакомились с пользовательским интерфейсом в Android системе. Теперь вы знаете язык XML и основные компоненты пользовательского интерфейса, а также их атрибуты. Информации было много, поэтому это нормально, если вы её не запомнили. При необходимости в следующих уроках вы сможете возвращаться к этому уроку, как к справочнику. Скорее выполняйте практические задания к этому уроку, чтобы набить руку и создать первый макет реального приложения!

  • Android developer. Declaring Layout
  • Android Fundamentails V2. Layouts and resources for the UI

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *