Элемент TextView — самый простой и в то же время один из самых используемых в приложениях элементов. TextView служит для отображения текста без возможности его редактирования.
Кроме того, элемент TextView используется как элемент для отображения данных в контейнерных элементах-списках. От класса TextView наследуется множество других элементов: кнопки, флажки и переключатели — элементы управления, на которых может быть отображен текст. В будущих уроках, мы будем активно применять этот элемент для отображения состояния элементов при обработке событий.
Элемент TextView, так же как и объект View, от которого он наследуется, поддерживает собственное разнообразие XML-атрибутов. Некоторые атрибуты являются определенными только в объекте TextView, но эти атрибуты могут также наследоваться любыми объектами, которые расширяют этот класс.
Свойства для элемента TextView можно задавать как в файле компоновки, так и в программном коде. Например, для отображения текста в TextView в файле компоновки используется атрибут android:text, а в программном коде вызывается метод setText() этого класса.
В целом, XML-словарь элементов пользовательского интерфейса близок к структуре классов и методов этих элементов, где имя элемента соответствует имени класса, а атрибуты элемента — методам этого класса. Фактически, соответствие является часто настолько точным, что легко предположить без обращения к документации Android, какой XML-атрибут передает метод класса или, наоборот, какой метод класса соответствует конкретному XML-элементу. В таблице приведены для примера несколько свойств элемента TextView, чтобы вы могли оценить точность соответствия XML-атрибутов и методов класса TextView.
Соответствие XML-атрибутов и методов в классах представлений
Однако обратите внимание на последнюю строку в таблице: не всегда XML-словарь идентичен структуре java-классов.
Некоторые атрибуты элемента TextView являются общими по отношению ко всем объектам View, потому что они унаследованы от корневого класса View. Такими атрибутами являются, например, id, layout_width, layout_height, с которыми вы уже познакомились в главе 4.
Если в программном коде мы работаем с данным элементом пользовательского интерфейса, в файле компоновки обязательно определяют идентификатор, например:
где символ @ в начале строки указывает, что синтаксический анализатор XML должен проанализировать и развернуть остальную часть строки идентификатора и определить это выражение как ресурс идентификатора. Символ + означает, что это новое имя ресурса, которое должно быть создано и добавлено к нашим ресурсам в файл R.java, автоматически генерируемый средой Android для проекта.
Требование к уникальности идентификаторов не распространяется на все дерево элементов, но они должны быть уникальны в пределах части дерева (которая нередко может быть и полным деревом, так что лучше создавать совершенно уникальные идентификаторы, если это возможно).
Если планируется создание приложения с многоязыковой поддержкой пользовательского интерфейса, вместо непосредственного задания текста в XML-компоновке или в коде программы необходимо создать ссылку на текстовый XML-ресурс:
где text_hello — имя ресурса.
В коде программы ссылка на XML-ресурс задается методом setText(), который принимает ссылку на идентификатор ресурса, определенного в файле R.java (автоматически сгенерированном средой разработки), например:
Для всех перечисленных ранее атрибутов в классе TextView есть соответствующие методы для чтения или задания соответствующих свойств.
Сейчас мы создадим простое приложение с элементом TextView, в котором рассмотрим различные способы задания его свойств — через атрибуты в файле компоновки и программно, в коде класса, реализующего окно приложения. Для этого создайте новый проект. Для файла компоновки в уроках будет имя main.xml, так, на мой взгляд, удобнее main.xml, а ему соответствует java-класс MainActivity но, если хотите используйте имя по умолчанию — activity_main.xml). Откройте файл компоновки добавьте компоновку LinearLayout и в ней четыре элемента TextView с идентификаторами text1, text2, text3, text4.
Для text1 задайте текст непосредственно в XML-коде. Для элемента text2 текст задайте через ссылку на строковый ресурс. Можно также задать различный размер, цвет и стиль форматирования текста для элементов text3 и text4. Полный код файла компоновки:
Результат должен получиться такой, как на рисунке. Для первого поля текст задается прямо в файле компоновки, для второго — в файле компоновки из строковых ресурсов strings.xml, для третьего — в коде, для четвертого поля — читается в java-коде из файла ресурсов.
Кроме того, элемент TextView используется как элемент для отображения данных в контейнерных элементах-списках. От класса TextView наследуется множество других элементов: кнопки, флажки и переключатели — элементы управления, на которых может быть отображен текст. В будущих уроках, мы будем активно применять этот элемент для отображения состояния элементов при обработке событий.
Элемент TextView, так же как и объект View, от которого он наследуется, поддерживает собственное разнообразие XML-атрибутов. Некоторые атрибуты являются определенными только в объекте TextView, но эти атрибуты могут также наследоваться любыми объектами, которые расширяют этот класс.
Свойства для элемента TextView можно задавать как в файле компоновки, так и в программном коде. Например, для отображения текста в TextView в файле компоновки используется атрибут android:text, а в программном коде вызывается метод setText() этого класса.
В целом, XML-словарь элементов пользовательского интерфейса близок к структуре классов и методов этих элементов, где имя элемента соответствует имени класса, а атрибуты элемента — методам этого класса. Фактически, соответствие является часто настолько точным, что легко предположить без обращения к документации Android, какой XML-атрибут передает метод класса или, наоборот, какой метод класса соответствует конкретному XML-элементу. В таблице приведены для примера несколько свойств элемента TextView, чтобы вы могли оценить точность соответствия XML-атрибутов и методов класса TextView.
Соответствие XML-атрибутов и методов в классах представлений
Имя XML-атрибута | Соответствующий метод в классе Java |
android:text | setText() |
android:textColor | setTextColor() |
android:textSize | setTextSize() |
android:textColorHighlight | setHighlightColor() |
Однако обратите внимание на последнюю строку в таблице: не всегда XML-словарь идентичен структуре java-классов.
Некоторые атрибуты элемента TextView являются общими по отношению ко всем объектам View, потому что они унаследованы от корневого класса View. Такими атрибутами являются, например, id, layout_width, layout_height, с которыми вы уже познакомились в главе 4.
Если в программном коде мы работаем с данным элементом пользовательского интерфейса, в файле компоновки обязательно определяют идентификатор, например:
android:id="@+id/text1"
где символ @ в начале строки указывает, что синтаксический анализатор XML должен проанализировать и развернуть остальную часть строки идентификатора и определить это выражение как ресурс идентификатора. Символ + означает, что это новое имя ресурса, которое должно быть создано и добавлено к нашим ресурсам в файл R.java, автоматически генерируемый средой Android для проекта.
Требование к уникальности идентификаторов не распространяется на все дерево элементов, но они должны быть уникальны в пределах части дерева (которая нередко может быть и полным деревом, так что лучше создавать совершенно уникальные идентификаторы, если это возможно).
Если планируется создание приложения с многоязыковой поддержкой пользовательского интерфейса, вместо непосредственного задания текста в XML-компоновке или в коде программы необходимо создать ссылку на текстовый XML-ресурс:
android:text="@string/text_hello"
где text_hello — имя ресурса.
В коде программы ссылка на XML-ресурс задается методом setText(), который принимает ссылку на идентификатор ресурса, определенного в файле R.java (автоматически сгенерированном средой разработки), например:
final TextView text = (TextView)findViewById(R.id.text4); text4.setText(R.string.text_hello);У элемента TextView есть многочисленные методы и XML-атрибуты для работы с текстом. Например, основные XML-атрибуты, отображающие свойства элемента TextView:
- android:textSize;
- android:textStyle;
- android:textColor.
- px (pixels) — пикселы;
- dp (density-independent pixels) — независимые от плотности пикселы. Это абстрактная единица измерения, основанная на физической плотности экрана;
- sp (scale-independent pixels) — независимые от масштабирования пикселы;
- in (inches) — дюймы, базируются на физических размерах экрана;
- pt (points) — 1/72 дюйма, базируются на физических размерах экрана;
- mm (millimeters) — миллиметры, также базируются на физических размерах экрана.
android:textSize="48sp";Атрибут android:textStyle представляет стиль текста (нормальный, полужирный, наклонный). Для задания стиля текста используются только следующие константы:
- normal;
- bold;
- italic.
android:textStyle="bold";Атрибут android:textColor задает цвет текста. Для задания цвета используются четыре формата в шестнадцатеричной кодировке:
- #RGB;
- #ARGB;
- #RRGGBB;
- #AARRGGBB,
Для всех перечисленных ранее атрибутов в классе TextView есть соответствующие методы для чтения или задания соответствующих свойств.
Сейчас мы создадим простое приложение с элементом TextView, в котором рассмотрим различные способы задания его свойств — через атрибуты в файле компоновки и программно, в коде класса, реализующего окно приложения. Для этого создайте новый проект. Для файла компоновки в уроках будет имя main.xml, так, на мой взгляд, удобнее main.xml, а ему соответствует java-класс MainActivity но, если хотите используйте имя по умолчанию — activity_main.xml). Откройте файл компоновки добавьте компоновку LinearLayout и в ней четыре элемента TextView с идентификаторами text1, text2, text3, text4.
Для text1 задайте текст непосредственно в XML-коде. Для элемента text2 текст задайте через ссылку на строковый ресурс. Можно также задать различный размер, цвет и стиль форматирования текста для элементов text3 и text4. Полный код файла компоновки:
Файл компоновки main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <TextView android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Text from res/layout/main.xml"/> <TextView android:id="@+id/text2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/text_hello" android:textStyle="bold"/> <TextView android:id="@+id/text3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="24sp" android:textStyle="bold" android:textColor="#ABABAB"/> <TextView android:id="@+id/text4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="36sp" android:textStyle="italic"/> </LinearLayout>В файле ресурсов strings.xml добавьте после ресурса app_name новый строковый ресурс "Hello, Android!" (листинг 2).
Файл ресурсов strings.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">TextView Sample</string> <string name="text_hello">Text from res/values/string.xml</string> <string name="action_settings">Settings</string> </resources>В классе MainActivity инициализируйте TextView-объекты text3, text4 и методом setText() задайте для них текст. Полный код класса окна приложения:
Файл класса окна приложения MainActivity.java
package com.example.textview; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final TextView text3 = (TextView)findViewById(R.id.text3); text3.setText("Text from Activity"); final TextView text4 = (TextView)findViewById(R.id.text4); text4.setText(R.string.text_hello); } }
Результат должен получиться такой, как на рисунке. Для первого поля текст задается прямо в файле компоновки, для второго — в файле компоновки из строковых ресурсов strings.xml, для третьего — в коде, для четвертого поля — читается в java-коде из файла ресурсов.
Приложение с элементами TextView
В следующем уроке мы рассмотрим работу с элементом ImageView.
В следующем уроке мы рассмотрим работу с элементом ImageView.