Сводная информация о главе 3. Более подробная информация
Примечание.
Эта книга была опубликована весной 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.FromUint
uint
значение, вычисляемое как (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
, все каналы, равные –1Color.Accent
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
, Small
Medium
и 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 — ту же методику для всего абзаца, как показано ниже:
Программа NamedFontSizes использует один Label
и объект FormattedString
, чтобы отобразить все размеры именованных шрифтов для каждой платформы.