Xamarin.Forms Editor
Editor
コントロールは、複数行の入力を受け入れるために使用されます。
テキストの設定と読み取り
Editor
は、他のテキスト表示ビューと同様に、Text
プロパティを公開します。 このプロパティを使用すると、Editor
によって表示されるテキストを設定および読み取ることができます。 次の例は、XAML で Text
プロパティを設定する方法を示しています。
<Editor x:Name="editor" Text="I am an Editor" />
C# の場合:
var editor = new Editor { Text = "I am an Editor" };
テキストを読み取るために、C# の Text
プロパティにアクセスします。
var text = editor.Text;
プレースホルダー テキストを設定する
Editor
は、ユーザーによる入力を格納していない場合に、プレースホルダー テキストを表示するように設定できます。 これは、Placeholder
プロパティを string
に設定することによって実現され、多くの場合、Editor
に適したコンテンツの種類を示すために使用されます。 さらに、プレースホルダー テキストの色は、PlaceholderColor
プロパティを Color
に設定することで制御できます。
<Editor Placeholder="Enter text here" PlaceholderColor="Olive" />
var editor = new Editor { Placeholder = "Enter text here", PlaceholderColor = Color.Olive };
テキスト入力を禁止する
false
の既定値の IsReadOnly
プロパティを true
に設定することで、ユーザーが Editor
内のテキストを変更できないようにすることができます。
<Editor Text="This is a read-only Editor"
IsReadOnly="true" />
var editor = new Editor { Text = "This is a read-only Editor", IsReadOnly = true });
Note
IsReadonly
プロパティは、IsEnabled
プロパティが Editor
の視覚的外観を灰色に変えるのとは異なり、Editor
の視覚的外観を変えることはありません。
テキストの変換
TextTransform
プロパティを TextTransform
列挙型の値に設定すれば、Editor
は、Text
プロパティに格納されているテキストの大文字と小文字を変換できます。 この列挙型には、次の 4 つの値があります。
None
は、テキストが変換されないことを示します。Default
は、プラットフォームの既定の動作を使います。 これは、TextTransform
プロパティの既定値です。Lowercase
は、テキストが小文字に変換されることを示します。Uppercase
は、テキストが大文字に変換されることを示します。
次の例は、テキストを大文字に変換する方法を示しています。
<Editor Text="This text will be displayed in uppercase."
TextTransform="Uppercase" />
同等の C# コードを次に示します。
Editor editor = new Editor
{
Text = "This text will be displayed in uppercase.",
TextTransform = TextTransform.Uppercase
};
入力の長さを制限する
MaxLength
プロパティを使用すると、Editor
に許可されている入力の長さを制限できます。 このプロパティは正の整数に設定する必要があります。
<Editor ... MaxLength="10" />
var editor = new Editor { ... MaxLength = 10 };
MaxLength
プロパティの値が 0 の場合は、入力が許可されないことを示し、Editor
の規定値である int.MaxValue
の場合は、入力可能な文字数に有効な制限がないことを示します。
文字間隔
Editor.CharacterSpacing
プロパティに double
値を設定することで、文字間隔を Editor
に適用できます。
<Editor ...
CharacterSpacing="10" />
同等の C# コードを次に示します。
Editor editor = new editor { CharacterSpacing = 10 };
結果として、Editor
により表示されるテキスト内の文字は、デバイスに依存しない単位で CharacterSpacing
の間隔が設定されます。
Note
CharacterSpacing
プロパティの値は、Text
と Placeholder
プロパティによって表示されるテキストに適用されます。
エディターの自動サイズ設定
Editor
では、Editor.AutoSize
プロパティを EditorAutoSizeOption
列挙型の値である TextChanges
に設定することで、そのコンテンツに合わせてサイズを自動的に設定することができます。 この列挙型には、次の 2 つの値があります。
Disabled
は、自動サイズ設定が無効であることを示します。これは、既定値です。TextChanges
は、自動サイズ変更が有効になっていることを示します。
これは、コードで次のように実現できます。
<Editor Text="Enter text here" AutoSize="TextChanges" />
var editor = new Editor { Text = "Enter text here", AutoSize = EditorAutoSizeOption.TextChanges };
自動サイズ変更が有効になっている場合、ユーザーがテキストを入力すると Editor
の高さが増え、ユーザーがテキストを削除すると高さが小さくなります。
Note
HeightRequest
プロパティが設定されている場合、Editor
は自動サイズ設定されません。
キーボードをカスタマイズする
ユーザーが Editor
を操作するときに表示されるキーボードは、Keyboard
プロパティを使用して、Keyboard
クラスの次のプロパティのいずれかにプログラムで設定できます。
Chat
- 絵文字が使えるテキスト メッセージや場所に使います。Default
- 既定のキーボード。Email
- 電子メール アドレスを入力するときに使用します。Numeric
- 数値を入力するときに使用します。Plain
-KeyboardFlags
を指定しないで、テキストを入力するときに使用します。Telephone
- 電話番号を入力するときに使用します。Text
- テキストを入力するときに使用します。Url
- ファイル パスおよび Web アドレスを入力するために使用します。
XAML では次のようにしてこれを実現できます。
<Editor Keyboard="Chat" />
同等の C# コードを次に示します。
var editor = new Editor { Keyboard = Keyboard.Chat };
各キーボードの例は、Recipes リポジトリにあります。
Keyboard
クラスには、大文字の設定、スペルチェック、および単語補完候補の動作を指定することで、キーボードをカスタマイズするために使用できる Create
ファクトリ メソッドもあります。 KeyboardFlags
列挙値がメソッドへの引数として指定され、カスタマイズされた Keyboard
が返されます。 KeyboardFlags
列挙体には次の値が含まれます。
None
- キーボードに機能は追加されません。CapitalizeSentence
- 入力された各文の最初の単語の最初の文字が自動的に大文字になることを示します。Spellcheck
- 入力したテキストに対してスペル チェックが実行されることを示します。Suggestions
- 入力したテキストに対して単語補完が提供されることを示します。CapitalizeWord
- 各単語の最初の文字が自動的に大文字になることを示します。CapitalizeCharacter
- すべての文字が自動的に大文字になることを示します。CapitalizeNone
- 大文字の自動設定を行わないことを示します。All
- 入力したテキストに対して、スペルチェック、単語補完、および文への大文字の設定が行われることを示します。
次の XAML コード例は、既定の Keyboard
をカスタマイズして、単語補完を提供し、入力したすべての文字を大文字に設定する方法を示しています。
<Editor>
<Editor.Keyboard>
<Keyboard x:FactoryMethod="Create">
<x:Arguments>
<KeyboardFlags>Suggestions,CapitalizeCharacter</KeyboardFlags>
</x:Arguments>
</Keyboard>
</Editor.Keyboard>
</Editor>
同等の C# コードを次に示します。
var editor = new Editor();
editor.Keyboard = Keyboard.Create(KeyboardFlags.Suggestions | KeyboardFlags.CapitalizeCharacter);
スペル チェックの有効化と無効化
IsSpellCheckEnabled
プロパティは、スペル チェックを有効にするかどうかを制御します。 既定では、プロパティは true
に設定されます。 ユーザーがテキストを入力すると、スペルミスが示されます。
ただし、ユーザー名の入力などの一部のテキスト入力シナリオでは、スペル チェックは否定的なエクスペリエンスを提供するため、IsSpellCheckEnabled
プロパティを false
に設定して無効にする必要があります。
<Editor ... IsSpellCheckEnabled="false" />
var editor = new Editor { ... IsSpellCheckEnabled = false };
Note
IsSpellCheckEnabled
プロパティが false
に設定されていて、カスタム キーボードが使用されていない場合、ネイティブ スペル チェッカーは無効になります。 ただし、スペルチェックを無効にする Keyboard
(Keyboard.Chat
など) が設定がされている場合、IsSpellCheckEnabled
プロパティは無視されます。 したがって、このプロパティを使用して、スペル チェックを明示的に無効にしている Keyboard
に対してスペル チェックを有効にすることはできません。
テキスト予測を有効および無効にする
IsTextPredictionEnabled
プロパティは、テキスト予測と自動テキスト修正を有効にするかどうかを制御します。 既定では、プロパティは true
に設定されます。 ユーザーがテキストを入力すると、単語の予測が表示されます。
ただし、ユーザー名の入力など、一部のテキスト入力シナリオでは、テキスト予測と自動テキスト修正は否定的なエクスペリエンスを提供するため、IsTextPredictionEnabled
プロパティを false
に設定して無効にする必要があります。
<Editor ... IsTextPredictionEnabled="false" />
var editor = new Editor { ... IsTextPredictionEnabled = false };
Note
IsTextPredictionEnabled
プロパティが false
に設定されていて、カスタム キーボードが使用されていない場合、テキスト予測と自動テキスト修正は無効になります。 ただし、テキスト予測を無効にする Keyboard
が設定されている場合、IsTextPredictionEnabled
プロパティは無視されます。 そのため、このプロパティを使用して、テキスト予測を明示的に無効にする Keyboard
に対してテキスト予測を有効にすることはできません。
色
Editor
は、BackgroundColor
プロパティを使用してカスタム背景色を使用するように設定できます。 各プラットフォームで色を使用できるようにするには、特別な注意が必要です。 各プラットフォームでテキストの色の既定値が異なるため、プラットフォームごとにカスタムの背景色を設定する必要がある場合があります。 各プラットフォームの UI の最適化の詳細については、プラットフォームの調整の使用を参照してください。
C# の場合:
public partial class EditorPage : ContentPage
{
public EditorPage ()
{
InitializeComponent ();
var layout = new StackLayout { Padding = new Thickness(5,10) };
this.Content = layout;
//dark blue on UWP & Android, light blue on iOS
var editor = new Editor { BackgroundColor = Device.RuntimePlatform == Device.iOS ? Color.FromHex("#A4EAFF") : Color.FromHex("#2c3e50") };
layout.Children.Add(editor);
}
}
XAML の場合:
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="TextSample.EditorPage"
Title="Editor Demo">
<ContentPage.Content>
<StackLayout Padding="5,10">
<Editor>
<Editor.BackgroundColor>
<OnPlatform x:TypeArguments="x:Color">
<On Platform="iOS" Value="#a4eaff" />
<On Platform="Android, UWP" Value="#2c3e50" />
</OnPlatform>
</Editor.BackgroundColor>
</Editor>
</StackLayout>
</ContentPage.Content>
</ContentPage>
選択した背景とテキストの色が各プラットフォームで使用できること、そしてプレースホルダー テキストが隠れていないことを確認します。
イベントと対話機能
Editor
は、次の 2 つのイベントを公開します。
- TextChanged – エディターでテキストが変更されたときに発生します。 変更の前後のテキストを提供します。
- Completed – ユーザーがキーボードのリターン キーを押して入力を終了したときに発生します。
Note
Entry
の継承元である VisualElement
クラスにも、Focused
と Unfocused
イベントがあります。
完了済み
Completed
イベントは、Editor
との対話の完了に対応するために使用されます。 Completed
は、ユーザーがキーボードでリターン キーを入力することで (もしくは UWP の Tab キーを押して) フィールドの入力を終了したときに発生します。 イベントのハンドラーは、送信者と EventArgs
を受け取る汎用イベント ハンドラーです。
void EditorCompleted (object sender, EventArgs e)
{
var text = ((Editor)sender).Text; // sender is cast to an Editor to enable reading the `Text` property of the view.
}
completed イベントは、コードと XAML でサブスクライブできます。
C# の場合:
public partial class EditorPage : ContentPage
{
public EditorPage ()
{
InitializeComponent ();
var layout = new StackLayout { Padding = new Thickness(5,10) };
this.Content = layout;
var editor = new Editor ();
editor.Completed += EditorCompleted;
layout.Children.Add(editor);
}
}
XAML の場合:
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="TextSample.EditorPage"
Title="Editor Demo">
<ContentPage.Content>
<StackLayout Padding="5,10">
<Editor Completed="EditorCompleted" />
</StackLayout>
</ContentPage.Content>
</Contentpage>
TextChanged
TextChanged
イベントは、フィールドの内容の変更に対応するために使用されます。
TextChanged
は、Editor
の Text
が変更されるたびに発生します。 イベントのハンドラーは、TextChangedEventArgs
のインスタンスを受け取ります。 TextChangedEventArgs
では、OldTextValue
プロパティとNewTextValue
プロパティを使用して、Editor
Text
の古い値と新しい値にアクセスできます。
void EditorTextChanged (object sender, TextChangedEventArgs e)
{
var oldText = e.OldTextValue;
var newText = e.NewTextValue;
}
completed イベントは、コードと XAML でサブスクライブできます。
コード内で以下のように指定します。
public partial class EditorPage : ContentPage
{
public EditorPage ()
{
InitializeComponent ();
var layout = new StackLayout { Padding = new Thickness(5,10) };
this.Content = layout;
var editor = new Editor ();
editor.TextChanged += EditorTextChanged;
layout.Children.Add(editor);
}
}
XAML の場合:
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="TextSample.EditorPage"
Title="Editor Demo">
<ContentPage.Content>
<StackLayout Padding="5,10">
<Editor TextChanged="EditorTextChanged" />
</StackLayout>
</ContentPage.Content>
</ContentPage>