Содержание
Для ввода текстовых данных в приложении .NET MAUI могут использоваться два типа компонентов — Editor
(многострочный редактор) и Entry
(однострочный редактор). В этой части мы рассмотрим работу с текстовыми полями в .NET MAUI и XAML
Общие свойства Editor и Entry
Так как оба редактора предназначены для ввода текста, то и свойства у этих редакторов, в большинстве случаев, аналогичны. Поэтому стоит сразу рассмотреть те свойства, которые присущи и Editor
и Entry
, а затем, рассмотреть отличия. Итак, оба редактора содержат следующие свойства:
Свойство | Тип | Описание |
CharacterSpacing |
double |
Определяет интервал между символами текста |
CursorPosition |
int |
Определяет положение курсора в редакторе |
FontAttributes , FontAutoScalingEnabled , FontFamily , FontSize |
Свойства для работы со шрифтом: оформление, масштабирование, семейство и размер шрифта. Подробное описание см. в этой части | |
IsReadOnly |
bool |
Определяет, следует ли запретить пользователю изменять текст. Значение по умолчанию false . |
IsSpellCheckEnabled |
bool |
Определяет, включена ли проверка орфографии |
IsTextPredictionEnabled |
bool |
Определяет, включено ли прогнозирование текста и автоматическое исправление текста (словарь T9) |
Keyboard |
Keyboard |
Указывает клавиатуру, отображаемую при вводе текста |
MaxLength |
int |
Определяет максимальную длину входных данных |
Placeholder |
string |
Определяет текст, отображаемый при пустом элементе управления |
PlaceholderColor |
Color |
Определяет цвет текста-заполнителя |
SelectionLength |
int |
Возвращает длину выделенного текста |
Text |
string |
Определяет текст, введенный в элемент управления. |
TextColor , TextTransform |
Свойства для работы с текстом: цвет и регистр текста. Подробное описание см. в этой части |
Кроме того, оба элемента управления предоставляют нам для работы следующее событие:
public event TextChangedEventArgs> TextChanged;
возникающее каждый раз при изменении текста. Тип Text
предоставляет нам свойства:
New |
Новое значение текстового поля |
Old |
Предыдущее значение текстового поля |
Рассмотрим некоторые из этих свойств подробнее. Для этого создадим новое приложение .NET MAUI и изменим код файла MainPage.xaml.cs следующим образом:
namespace MauiApp8 { public partial class MainPage : ContentPage { public MainPage() { InitializeComponent(); } private void OnTextChanged(object sender, TextChangedEventArgs args) { EditorLabel.Text = args.OldTextValue; } } }
Здесь мы добавили обработчик события TextChanged
для нашего будущего редактора. Теперь изменим файл MainPage.xaml
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="MauiApp8.MainPage"> <ScrollView> <VerticalStackLayout Padding="30,0" Spacing="25"> <Editor Placeholder="Введите текст (не более 10 символов)" PlaceholderColor="Blue" MaxLength="10" Keyboard="Text" IsSpellCheckEnabled="True" IsTextPredictionEnabled="True" TextChanged="OnTextChanged"/> <Label x:Name="EditorLabel" /> </VerticalStackLayout> </ScrollView> </ContentPage>
Здесь мы добавили текстовый редактор для которого мы задали ряд свойств из таблицы выше, обработчик события TetChanged
и метку, в которой будет отображаться предыдущее значение из редактора.
Чтобы продемонстрировать работу редактора в полной мере, лучше всего запустить приложение в эмуляторе Android или же непосредственно на телефоне. Как только вы запустите приложение, то увидите редактор текста:
При нажатии на редактор откроется клавиатура для набора текста.
При наборе текста в редакторе вы будете видеть также, как меняется содержимое метки и, при этом, текст метки будет всегда на один символ короче, чем в редакторе так как мы отображаем в ней предыдущее значение свойства
Text
редактора. Теперь разберемся с тем, как мы можем управлять клавиатурой в редакторах
Вид клавиатуры в Editor и Entry
Вид клавиатуры (Keyboard
) — это одно из самых интересный свойств, которое в полной мере раскрывается именно при работе приложения на мобильных устройствах. Свойство Keyboard
может принимать следующие значения:
Значение | Описание |
Chat |
текстовая клавиатура с эмодзи. |
Default |
клавиатура по умолчанию |
Email |
используется для ввода адресов электронной почты |
Numeric |
цифровая клавиатура |
Plain |
предназначена для ввода текста, если нет заданных KeyboardFlags |
Telephone |
клавиатура для ввода телефонных номеров |
Text |
текстовая клавиатура |
Url |
клавиатура для ввода путей к файлам и веб-адресов |
Например, зададим в нашем приложении клавиатуру для ввода цифр (Numeric
):
<Editor Placeholder="Введите текст (не более 10 символов)" PlaceholderColor="Blue" MaxLength="10" Keyboard="Numeric" IsSpellCheckEnabled="True" IsTextPredictionEnabled="True" TextChanged="OnTextChanged"/>
Теперь в приложении наша клавиатура будет выглядеть следующим образом:
Также, для управления клавиатурой мы можем использовать значения
KeyboardFlags
. На данный момент, мы можем использовать следующие флаги для клавиатуры
Значение | Описание |
None |
указывает, что клавиатура не имеет никаких дополнительных функций. |
CapitalizeSentence |
указывает, что первые слова во всех вводимых предложениях автоматически начинаются с прописных букв. |
Spellcheck |
указывает, что для вводимого текста выполняется проверка орфографии |
Suggestions |
указывает, что для вводимых слов предлагается завершение |
CapitalizeWord |
указывает, что все слова автоматически начинаются с прописных букв |
CapitalizeCharacter |
указывает, что все символы автоматически пишутся прописными буквами |
CapitalizeNone |
указывает, что автоматическая подстановка прописных букв не выполняется |
All |
указывает, что для вводимого текста выполняется проверка орфографии, завершение слов и автоматическое написание предложений с прописной буквы |
Так как KeyboardFlags
представляет собой битовые флаги, то мы можем использовать несколько флагов одновременно. Например, перепишем XAML-код нашего редактора следующим образом:
<Editor Placeholder="Введите текст (не более 10 символов)" PlaceholderColor="Blue" MaxLength="10" IsSpellCheckEnabled="True" IsTextPredictionEnabled="True" TextChanged="OnTextChanged"> <Editor.Keyboard> <Keyboard x:FactoryMethod="Create"> <x:Arguments> <KeyboardFlags>Suggestions, Spellcheck, CapitalizeWord</KeyboardFlags> </x:Arguments> </Keyboard> </Editor.Keyboard> </Editor>
Теперь наша клавиатура будет обычной текстовой и, при этом, каждое новое слово будет писаться с заглавной буквы, а также будет предлагаться автозавершение слов и проводиться проверка орфографии:
Теперь посмотрим на свойства
Editor
характерные именно для этого элемента управления.
Свойства Editor
Editor
определяет следующие свойства:
Свойство | Тип | Описание |
AutoSize |
EditorAutoSizeOption |
определяет, будет ли редактор изменять свой размер, чтобы разместить весь текст в видимой области. |
HorizontalTextAlignment |
TextAlignment |
определяет горизонтальное выравнивание текста |
VerticalTextAlignment |
TextAlignment |
определяет вертикальное выравнивание текста |
Продемонстрируем значение этих свойств, изменив редактор в приложении следующим образом:
<Editor Placeholder="Введите текст (не более 10 символов)" PlaceholderColor="Blue" AutoSize="TextChanges" VerticalTextAlignment="Center" HorizontalTextAlignment="Center" IsSpellCheckEnabled="True" IsTextPredictionEnabled="True" TextChanged="OnTextChanged" Keyboard="Text"> </Editor>
Теперь снова запустим приложение и напишем в редакторе текст, который явно не уместится в одну строку. В результате вы увидите, что Editor
меняем свою высоту:
Кроме того, в соответствии с указанными настройками, текст размещается по центру как по вертикали, так и по горизонтали.
Свойства Entry
Однострочный редактор Entry
предоставляет нам следующие свойства:
Свойство | Тип | Описание |
ClearButtonVisibility |
ClearButtonVisibility |
определяет, отображается ли кнопка очистки ввода. Может принимать следующие значения:
|
HorizontalTextAlignment |
TextAlignment |
определяет горизонтальное выравнивание текста |
VerticalTextAlignment |
TextAlignment |
определяет вертикальное выравнивание текста |
IsPassword |
bool |
указывает, должна ли запись визуально скрывать типизированный текст |
ReturnType |
ReturnType |
указывает внешний вид кнопки «Ввод». Может принимать следующие значения:
|
Например, изменим наше приложение следующим образом:
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="MauiApp8.MainPage"> <ScrollView> <VerticalStackLayout Padding="30,0" Spacing="25"> <Entry IsPassword="True" ReturnType="Send" ClearButtonVisibility="WhileEditing"/> <Label x:Name="EditorLabel" /> </VerticalStackLayout> </ScrollView> </ContentPage>
Теперь запустим приложение и посмотрим на результат. При запуске вы увидите обычное поле ввода без каких-либо дополнительных кнопок:
Как только вы начнете набирать текст, то увидите, что он скрывается, а в правой части поля появится кнопка очистки текста:
При этом, обратите внимание на кнопку «Ввод» на клавиатуре — её внешний вид может изменяться в зависимости от того, какое значения
ReturnType
было установлено. В нашем случае кнопка будет содержать пиктограмму «галочку». Можете поменять значение ReturnType
, например, на Search
и увидите, что на кнопке будет иконка с лупой. Вид кнопки «Ввод» зависит от платформы и не везде она пиктограммы будут выглядеть одинаково — это необходимо учитывать при работе со свойством ReturnType
.
Итого
Для ввода текста в .NET MAUI мы можем использовать два вида текстовых редакторов: Editor
— многострочный редактор и Entry
— однострочный редактор. Оба редактора содержат достаточно большое количество одинаковый свойств, например, свойство Keyboard
, свойства шрифтов и оформления текста. При этом, Entry
позволяет показывать кнопку очистки текста, а также менять внешний вид кнопки «Ввод». В свою очередь, Editor
позволяет изменять свой размер в зависимости от размера введенного в него текста.