Android labelfor что это

Локализация приложения Android

Вопросам локализации приложений уделено немало места на страницах нашего сайта. Наиболее значимая статья, связанная с фундаментальными основами локализации, рассказывает о региональных стандартах, форматах представления числовых, денежных и временных значениях в различных странах, ресурсных файлах и форматах сообщений. Поэтому, в этой статье будет рассмотрен только вопрос локализации интерфейса Android приложений. Здесь на примере мы должны увидеть процесс формирования и использования ресурсных файлов.

На странице описания табличной разметки TableLayout был создан файл table.xml, в котором уже подключались свойства ресурсного файла strings.xml. В этой статье мы продолжим эту тему и рассмотрим следующие вопросы локализации приложений в среде разработки Android Studio :

  • создание ресурсных директорий;
  • создание ресурсных файлов;
  • локализация интерфейса;
  • динамическое подключение ресурсных файлов.

Ресурсные директории

Для локализации интерфейса, первое, что нам необходимо выполнить, это создать ресурсные файлы, которые хранятся в определенных ресурсных директориях. Создадим такие директории для языков локализации «ru» и «en». Для этого выделяем проект p02Layout, открываем контексное меню правой клавишей мыши и выбираем пункт меню New / Android Resource Directory. В открывшемся диалоговом окне в списке Available qualifiers выбираем пункт Locale и переносим его в правую часть Chosen qualifiers нажатием на кнопку с изображением «двух стрелок вправо».

В результате предыдущего действия интерфейс окна изменится и появятся другие компоненты и списки. Теперь необходимо в списке Language выбрать нужный язык. Прокрутка списка для выбора русского языка не дала нужного результата. Русский язык не был найден и представленная на скриншоте строка не была обнаружена, несмотря на то, что в последнем списке (Specific Region Only:) страна «RU: Russia» присутствует. Но после ввода символов «ru» при активности (нахождении фокуса) списка Language, сразу же появилась нужная запись и поле фильтрации в верхней части списка. Возьмите это на вооружение при поиске требуемого языка локализации. Наименование директории values-ru было сформировано студией автоматически после выбора языка локализации. Следующим шагом точно также была добавлена директория для английского языка «en».

Примечание : в проекте ничего не изменилось; как была одна директория res/values, так к ней ничего и не добавилось. Это специфика Android Studio – ничего личного, только проект.

Но если посмотреть на структуру проекта со стороны проводника, то Вы сразу же увидите добавленные ресурсные директории values-en, values-ru. Так что особых тревог быть не должно; все делаем правильно и ничего не пропало.

Примечание :
1. При создании ресурсных директорий не был использован регион из списка Specific Region Only. Т.е. была выделена запись Any Region. Но если появится необходимость разделить англичан и американцев, то необходимо будет выделить дополнительно соответствующую запись и создать для английского языка две директории : res/values-en-rUK и res/values-en-rUS. Дополнительный символ обозначения региона к наименованию страны Studio добавит самостоятельно (. -rUK, . -rUS). Не забудьте, что в этом случае в объекте локализации Locale также должен быть учтен регион/страна.
2. Локализовать можно не только строковые ресурсы, но и изображения. Так, например, при использовании национальных флагов, следовало бы дополнительно создать соответствующие директории res/drawable-en, res/drawable-ru, в которых будут храниться изображения, ориентированные на определенные регионы.

Ресурсные файлы

После определения ресурсных директорий необходимо добавить ресурсные файлы. Для этого опять же выделяем проект, вызываем контекстное меню правой клавишей мыши и выбираем New / Android Resource File. В открывшемся диалоговом окне опять же выбираем Language и переносим его в список Chosen qualifiers, как это было сделано на предыдущем шаге. В списке Language вводим требуемый язык, в результате чего Studio определит директорию размещения файла (Directory name). Теперь необходимо ввести наименование файла (File name) и нажать ОК. Скриншот отображает состояние после выбора языка локалилизации и определения наименования файла ресурсов string.xml.

Читайте также:  Swat and zombies для андроида

В результате создания ресурсных файлов в структуре проекта будут добавлены записи в раздел res/values/strings. Помним, что простой strings.xml используется по умолчанию, если в системе не будет найден ресурсный файл приложения для соответствующего объекта Locale.

Ресурсные файлы

После выполнения двух предыдущих шагов были созданы ресурсные директории с файлами string.xml. То есть в трех разных директориях (values, values-en, values-ru) хранятся три файла с одинаковыми наименованиями strings.xml. В этом суть отличия локализации приложений Android. Теперь необходимо определить содержимое файлов так, чтобы ключевые наименования у них были одинаковыми. Эти ключевые наименования будут использоваться для определения заголовков меток и кнопок.

Листинг файла values-ru/string.xml

Листинг файла values-en/string.xml

Содержимое файла values/string.xml определим согласно англоязычного варианта локализации.

Локализация интерфейса

При локализации интерфейса необходимо к текстовым параметрам меток (android:text), полям ввода (android:hint) и кнопкам (android:text) подключить соответствующие ресурсные строки. Это можно сделать двумя способами.

Определение ресурсных значений в файле описания конфигурации

Простой способ связан с прямым определением соответствующих значений в файле описания интерфейса интерфейса. Для этого необходимо открыть файл table.xml, найти в описании компонент и связать его параметры с соответствующими ресурсными строками. Вот как это выглядит для метки и текстового поля определения учетной записи :

Текстовое значение метки tvLogin связали с ресурсной строкой «@string/lbl_login» (android:text), а подсказку текстового поля edLogin связали с «@string/hint_login» (android:hint).

Определение ресурсных значений в панели атрибутов компонента

Установить связь текстового значения компонента с ресурсным значением можно через интерфейс среды разработки Studio. Для этого необходимо выделить компонент и перейти к панели атрибутов. Здесь следует найти соответствующий параметр. На следующем скриншоте представлена выделенная строка текстового параметра компонента кнопки.

Сейчас у кнопки определено несвязанное текстовое значение Button. Можно в этой же строке ввести новое/необходимое значение; но можно и нажать на кнопку с изображением многоточия. В результате будет открыто окно выбора ресурсного значения. Здесь находим нужную строку в списке и нажимаем ОК.

Динамическое подключение ресурсных файлов

Для реализации динамического изменения локализуемых надписей интерфейса приложения проще всего в интерфейс добавить пару кнопок : одна из кнопок будет переводить интерфейс на русский язык, а другая – на английский. Конечно же, желательно, чтобы на кнопках были изображены соответствующие флаги. Но не будем сейчас усложнять задачу и ограничимся дополнительным размещением обычных кнопок. Вопрос использования изображений рассмотрен в отдельной статье Представления изображений в Android.

Полагаю, особого труда у Вас не составит самостоятельно поместить в таблицу две строки TableRow : одну для кнопок (btnEn, btnRu) и одну в качестве «разделителя». Ну и в заключении создадим метод changeLocale(Locale locale).

Теперь, когда интерфейс определен и ресурсные файлы подготовлены, осталось только разработать метод определения локализованных надписей интерфейса (changeLocale) и к кнопкам подключить соответствующие обработчики событий. Для этого откроем основной класс приложения MainActivity и внесем в него дполнительный код, представленный ниже :

В методе onCreate к кнопкам btnRu и btnEn подключены соответствующие обработчики событий. При нажатии на одну из кнопок в «консоль» выводится сообщение, формируется объект локализации и вызывается метод changeLocale. В методе changeLocale выполняется определение текущей Locale, после этого выполняется чтение соответствующего ресурсного файла и локализуются надписи интерфейса.

«Консоль» сообщений

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

После старта Вы должны увидеть интерфейс приложения, представленный на следующем скриншоте. Нажатием на верхние кнопки текстовые строки интерфейса переводятся на соответствующий язык локализации.

Читайте также:  Оптимизатор для андроид рейтинг

Локализация даты и времени

Для проверки функционирования локализации даты и времени ниже представлен соответствующий метод. Здесь все тривиально просто. Обратите только внимание на импорт класса Calendar.

Вызвав printCurentDateTime из метода changeLocale в консоль будут выведены следующие сообщения о дате и времени для двух различных языков локализации :

Источник

TableLayout приложения Android

Данная статья является продолжением описания разметки интерфейса приложения Android. В предыдущей статье был представлен обзор с примерами возможных типов разметки. В данной статье рассмотрим табличную разметку TableLayout.

Контейнер TableLayout позволяет формировать табличный интерфейс расположения компонентов, в котором View размещаются в строках и столбцах подобно тому, как это оформляется на WEB-странице в теге

. TableLayout не отображает линии обрамления для строк и столбцов. Количество ячеек в разных строках может отличаться. При формировании строки некоторые ячейки можно оставлять пустыми. На следующем скриншоте представлены компоненты вкладки Layouts, которые можно включать в контейнер TableLayout для формирования интерфейса.

Пример табличной разметки, TableLayout

Для наглядного использования контейнера TableLayout создадим layout в рамках приложения p02layout, описанного в начальной части статьи. При создании нового layout определим наименование table (table.xml) и тип контейнера TableLayout. После этого в table.xml создадим интерфейс авторизации пользователя, т.е. включим компоненты ввода логина и пароля с метками пользователя и кнопки выполнения авторизации и закрытия.

Интерфейс формы будет включать 4 строки. В первой строке разместим метку (TextView) и компонент определения логина пользователя (EditText). Во второй строке установим метку (TextView) и компонент определения пароля пользователя (TextPassword). Третья строка останется пустой; она будет определять по вертикали относительное расположение кнопок. В четвертой строке справа разместим кнопки управления (Button).

Добавление строк, TableRow. Для формирования строк интерфейса необходимо использовать объект TableRow, который должен быть дочерним элементом контейнера TableLayout. Каждый компонент TableRow определяет единственную строку в таблице. Строка может не иметь ячеек или иметь одну и более ячеек. Ячейки строки являются контейнерами для других объектов. В ячейку можно вкладывать другой TableLayout или LinearLayout.

Для добавления строки в интерфейс нужно открыть вкладку Layouts в Palette, выделить компонент TableRow и перетащить его либо на страницу, либо в контейнер панели Component Tree. После этого можно таким же образом размещать в строке другие компоненты.

На первом шаге, чтобы не делать лишних телодвижений можно в контейнер поместить сразу 4 строки TableRow. На следующем шаге создадим пустую 3-ю строку с определенным по высоте размером.

Пустая строка. Чтобы создать пустую строку требуемого размера по высоте в 3-ю строку TableRow помещаем контейнер LinearLayout и определяем его размер по высоте; это можно сделать мышкой. Хватаем нижнюю часть компонента (LinearLayout), перемещаем на требуемое расстояние и бросаем (drag-and-drop). Таким образом, можно отделить одну часть интерфейса – компонентов определения учетной записи – от другой (кнопок управления).

Cтрока кнопок управления. Теперь можно в 4-ую строку поместить кнопки управления. Для этого сначала перетаскиваем два пустых компонента Space, и после этого две кнопки «ОК» и «Закрыть». Компонент Space также можно растягивать мышкой по горизонтали. Первый Space будет определять ширину первой колонки для меток, второй Space в совокупности с кнопкой «ОК» будет определять ширину второй колонки, где будут размещаться компоненты ввода параметров учетной записи.

Фоновой цвет строки. Чтобы визуально выделять заголовки или строки таблицы можно определить фоновый цвет TableRow. Для этого следует использовать атрибут «android:background» компонента TableRow.

Растягивание компонентов. Чтобы содержимое компонентов TableRow растянулось на всю ширину макета, необходимо указать в атрибуте «android:stretchColumns» контейнера TableLayout символ ‘*’. Но можно через запятую указать порядковые номера столбцов, которые следует растянуть. Номера столбцов отсчитываются от нуля; остальные колонки занимают минимум места. Например :

Объединение колонок. Смежные ячейки строк можно объединить, чтобы расстянуть компонент на несколько ячеек. Ряды строк объединить нельзя. Слияние ячеек выполняется определением значения целочисленного атрибута «android:layout_span» компонента; layout_span является аналогом атрибута colspan в HTML. Вот как это было выполнено для компонента edLogin в примере :

Рамка в таблице. К сожалению, контейнер TableLayout не может создать рамку для таблицы или ячейки; разработчики Android почему-то не определили эту функциональность. Но данную функциональность Вы можете создать самостоятельно, определяя фоновой цвет таблицы и ячейки.

Ограничение размера колонки. По невнимательности в ячейку таблицы можно вставить очень длинный текст, который растянет ячейку так, что часть текста просто выйдет за пределы экрана. Чтобы избежать данной проблемы необходимо использовать атрибут «android:shrinkColumns» контейнтера TableLayout. С точки зрения программирования приложения данный атрибут управляется методом setColumnShrinkable().

Рассмотрим програмное управление свойством «android:shrinkColumns» на примере. Допустим, что одна из меток в нулевой колонке таблицы имеет очень длинный текст. В интерфейсе мы разместили кнопку btnShrink, по нажатию на которую будем устанавливать флаг «android:shrinkColumns» или сбрасывать. Для этого, необходимо в главном модуле определить логическую переменную (b_shrink), значением которой будет управлять. Код примера представлен в листинге :

Программное создание таблицы. При программном создании таблицы необходимо найти/определить контейнер TableLayout, к которому соответствующим образом добавить необходимое количество строк TableRow. Каждую из строк можно также динамически «оформить». Следующий пример демонстрирует динамическое формирование таблицы, в каждой из ячеек которой размещается изображения.

Интерфейс приложения

Описание возможностей TableLayout и TableRow можно было бы продолжать еще долго. Но, как я полагаю, Вы получили достаточный толчок в понимании того, как можно через интерфейс или программно определить тот или иной атрибут таблицы. Теперь Вам не составит труда самостоятельно соответствующим образом настроить табличный интерфейс приложения.

Возвращаясь к нашему примеру, можно представить внешний вид интерфейса приложения на следующем скриншоте.

Если посмотреть на представление компонентов в дереве (Component Tree), то сразу же бросаются в глаза изображения предупреждения с восклицательными знаками напротив компонентов. В данном случае среда разработки Android Studio нас предупреждает, что текстовые заголовки меток и кнопок необходимо локализовать. Кроме этого необходимо связать метки с компонентами.

Вопрос локализации интерфейса Android Studio рассмотрен на отдельной странице локализациии приложения, а здесь только покажем, как можно бороться с подобными предупреждениями.

Обратите внимание на светло-серый текст возле компонентов tvLogin (@string/lbl_login), tvPassword (@string/lbl_password). Рядом с кнопками подобный текст отсутствует, но имеются предупреждающие сообщения. Это говорит о том, что текст для меток tvLogin и tvPassword используется из ресурсного файла string.xml. Рассмотрим этот файл :

Текст меток

В ресурсном файле определяются наименования ключей и их значения подобно key=value. Для этого в текст файла в формате XML включаются строки с атрибутами (ключами) «name» и соответствующими значеними.

Далее необходимо определенный ключ подключить к метке TextView или к кнопке в опции «android:text». Вот как это выглядит для метки tvLogin :

В описании метки tvLogin определяется идентификатор «android:id», размер метки «android:layout_width», текстовое значение «android:text» и устанавливается связь с компонентом edLogin в опции «android:labelFor». Все эти значения можно определять также через интерфейс в панели атрибутов после выделения компонета.

Текстовое описание интерфейса

В следующем листинге приведено полное описание файла table.xml . Полагаю, что Вам не составит труда самостоятельно подключить локализованные строки к кнопкам.

Старт приложения

Для старта приложения необходимо в активности MainActivity.java в методе onCreate переключиться на интерфейсное описание table.xml :

Помните, что если Вы не корректно завершите работу Android приложения, то IDE может не удалить файлы и поддиректории эмулятора, и при следующем старте приложения эмулятор не запуститься. Как бороться с проблемами запуска эмулятора описано здесь.

Источник

Читайте также:  Андроид флай не включается
Оцените статью