Сводная информация о главе 3. Более подробная информация

Download Sample Скачайте пример

Примечание.

Эта книга была опубликована весной 2016 года и с тех пор не обновлялась. Многое в этой книге остается ценным, но некоторые материалы устарели, а некоторые разделы перестали быть полностью верными или полными.

В этой главе рассматриваются более подробные сведения о представлении Label, в том числе о цветах, шрифтах и форматировании.

Перенос абзацев

Если свойство Text объекта Label содержит длинный текст, Label автоматически переносит его на несколько строк, как показано в примере Baskervilles. Вы можете использовать здесь символы Юникода, например длинное тире "\u2014", и (или) коды C#, например перенос строки "\r".

Если для свойств HorizontalOptions и VerticalOptions объекта Label задано значение LayoutOptions.Fill, общий размер Label определяется доступным пространством, которое предоставляет контейнер. Такое представление Label называется ограниченным. Размер Label равен размеру контейнера.

Если для свойств HorizontalOptions и VerticalOptions заданы значения, отличные от LayoutOptions.Fill, размер Label определяется необходимым пространством для отображения текста, но не более размера пространства, которое предоставляет контейнер для Label. Такое представление Label называется неограниченным и определяет свой размер самостоятельно.

(Примечание. Термины, ограниченные и не ограниченные, могут быть контринтуитивными, так как неограниченное представление обычно меньше ограниченного представления. Кроме того, эти термины не используются последовательно в ранних главах книги.)

Некоторые представления, например Label, могут быть ограниченными по одному измерению и неограниченными по другому. Представление Label переносит текст на несколько строк только в том случае, если ограничен горизонтально.

Если Label ограничено, оно может занимать значительно больше пространства, чем требуется для текста. Текст можно поместить в общую область Label. Присвойте свойству HorizontalTextAlignment значение элемента перечисления TextAlignment (Start, Center или End), чтобы задать выравнивание для всех строк абзаца. По умолчанию используется значение Start, реализующее выравнивание текста по левому краю.

Присвойте свойству VerticalTextAlignment значение элемента перечисления TextAlignment, чтобы поместить текст в верхней, центральной или нижней части зоны, занимаемой Label.

Присвойте свойству LineBreakMode значение элемента перечисления LineBreakMode (WordWrap, CharacterWrap, NoWrap, HeadTruncation, MiddleTruncation или TailTruncation), чтобы задать правила усечения и разрыва строк для абзаца с несколькими строками.

Цвет текста и фона

Задайте для свойств TextColor и BackgroundColor объекта Label значения Color, чтобы управлять цветом текста и фона.

BackgroundColor применяется к фону всей области, занимаемой Label. В зависимости от свойств HorizontalOptions и VerticalOptions этот размер может значительно превышать размер области, необходимой для отображения текста. Вы можете с помощью цвета испытать разные значения HorizontalOptions, VerticalOptions, HorizontalExeAlignment и VerticalTextAlignment, чтобы оценить их влияние на размер и расположение Label, а также размер и расположение текста в Label.

Структура Color

Структура Color позволяет указывать цвета в виде значений RGB (красный, зеленый, синий) или HSL (оттенок, насыщенность, яркость), а также по имени цвета. Для обозначения прозрачности также доступен альфа-канал.

Используйте конструктор Color, чтобы задать следующие значения:

В качестве аргументов принимаются значения double в диапазоне от 0 до 1.

Для создания значений Color можно также использовать несколько статических методов:

  • Color.FromRgb для RGB-значений double в диапазоне от 0 до 1;
  • Color.FromRgb для целочисленных RGB-значений в диапазоне от 0 до 255;
  • Color.FromRgba для RGB-значений double с прозрачностью;
  • Color.FromRgba для целочисленных RGB-значений с прозрачностью;
  • Color.FromHsla для HSL-значений double с прозрачностью;
  • Color.FromUintuint значение, вычисляемое как (B + 256 * (G + 256 * (R + 256 * A)))
  • Color.FromHex для значений string в формате шестнадцатеричных цифр ("#AARRGGBB", "#RRGGBB", "#ARGB" или "#RGB"), где каждая буква соответствует шестнадцатеричной цифре для каналов альфа, красного, зеленого и синего. Этот метод используется в основном для преобразования цветов XAML, как описано в главе 7 XAML и код.

Созданное значение Color невозможно изменить. Характеристики цвета можно получить из следующих свойств:

Все они имеют значения double в диапазоне от 0 до 1.

Color также определяет 240 открытых статических полей только для чтения, обозначающих стандартные цвета. На момент написания книги поддерживались лишь 17 распространенных цветов.

Еще одно общее статическое поле только для чтения определяет цвет, у которого все цветовые каналы имеют нулевое значение.

Несколько методов экземпляра позволяют изменять существующий цвет, чтобы получить новый цвет.

И наконец, два статических свойства только для чтения определяют особое значение цвета.

Color.Default предназначено для применения цветовой схемы платформы, а значит имеет разное значение в разных контекстах на разных платформах. По умолчанию на платформах применяются следующие цветовые схемы:

  • iOS: темный текст на светлом фоне
  • Android: светлый текст на темном фоне (как в книге) или темный текст на светлом фоне (для материального исполнения с помощью AppCompat в главной ветви репозитория для примеров кода).
  • UWP: темный текст на светлом фоне

Значение Color.Accent использует цвет, определяемый платформой (либо пользователем), который отображается на темном или светлом фоне.

Изменение цветовой схемы приложения

Для нескольких платформ используется цветовая схема по умолчанию, как показано в списке выше.

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

Для платформ Windows цветовую тему обычно выбирает пользователь, но вы можете добавить в файл App.xaml для этой платформы атрибут RequestedTheme, которому присвоено значение Light или Dark. По умолчанию файл App.xaml в проекте UWP содержит атрибут RequestedTheme со значением Light.

Размеры и атрибуты шрифта

Задайте для свойства FontFamily объекта Label строковое значение, например "Times Roman", чтобы выбрать семейство шрифтов. Но таким способом можно указать лишь такое семейство шрифтов, которое поддерживается на конкретной платформе, а платформы в этом отношении не соответствуют друг другу.

Задайте для свойства FontSize объекта Label значение double, чтобы указать приблизительную высоту шрифта. Дополнительные сведения о правильном выборе размера шрифта см. в главе 5 Работа с размерами.

Вы также можете получить один из нескольких предварительно заданных размеров шрифтов, которые зависят от платформы. Статический Device.GetNamedSize метод и перегрузка возвращают double значение размера шрифта, соответствующее платформе на основе элементов NamedSize перечисления (Default, , Micro, SmallMediumи Large). Значение, возвращаемое элементом Medium, не обязательно совпадает с Default. В примере NamedFontSizes текст отображается с использованием имен размеров.

Задайте свойству FontAttributes объекта Label значение одного из элементов этого перечисления FontAttributes, то есть Bold, Italic или None. Элементы Bold и Italic можно объединять с помощью оператора побитового или из C#.

Форматированный текст

Пока во всех примерах весь текст, отображаемый в Label, был отформатирован единообразно. Чтобы изменить форматирование в пределах одной строки текста, не устанавливайте свойство Text для Label. Вместо этого присвойте свойству FormattedText значение объекта с типом FormattedString.

У FormattedString есть свойство Spans, которое указывает на коллекцию объектов Span. Каждый объект Span имеет собственные свойства Text, FontFamily, FontSize, FontAttributes, ForegroundColor и BackgroundColor.

Пример VariableFormattedText демонстрирует использование свойства FormattedText для одной строки текста, а VariableFormattedParagraph — ту же методику для всего абзаца, как показано ниже:

Triple screenshot of variable formatted paragraph

Программа NamedFontSizes использует один Label и объект FormattedString, чтобы отобразить все размеры именованных шрифтов для каждой платформы.