入力

.NET マルチプラットフォーム アプリ UI (.NET MAUI) Entry を使用すると、1 行のテキストを入力および編集できます。 さらに、Entry はパスワード フィールドとして使用できます。

Entry には、次のプロパティが定義されています。

  • double 型の CharacterSpacing は、入力されたテキストの文字間の間隔を設定します。
  • ClearButtonVisibility 型の ClearButtonVisibility は、クリア ボタンを表示するかどうかを制御します。これにより、ユーザーはテキストをクリアできます。 このプロパティの既定値は、クリア ボタンが表示されないようにします。
  • int 型の CursorPosition は、入力内のカーソルの位置を定義します。
  • FontAttributes 型の FontAttributes は、テキスト スタイルを決定します。
  • bool 型の FontAutoScalingEnabled は、テキストがオペレーティング システムで設定されたスケーリング設定を反映するかどうかを定義します。 このプロパティの既定値は true です。
  • string 型の FontFamily は、フォント ファミリを定義します。
  • double 型の FontSize は、フォント サイズを定義します。
  • TextAlignment 型の HorizontalTextAlignment は、テキストの水平方向の配置を定義します。
  • bool 型の IsPassword は、入力されたテキストをエントリで視覚的に隠すかどうかを指定します。
  • bool 型の IsTextPredictionEnabled は、テキスト予測と自動テキスト修正が有効かどうかを制御します。
  • ICommand 型の ReturnCommand は、リターン キーが押されたときに実行されるコマンドを定義します。
  • object 型の ReturnCommandParameter は、ReturnCommand のパラメーターを指定します。
  • ReturnType 型の ReturnType は、戻るボタンの外観を指定します。
  • int 型の SelectionLength は、入力内で選択したテキストの長さを表します。
  • TextAlignment 型の VerticalTextAlignment は、テキストの垂直方向の配置を定義します。
  • ClearButtonVisibility 型の ClearButtonVisibility は、クリア ボタンを表示するかどうかを制御します。これにより、ユーザーはテキストをクリアできます。 このプロパティの既定値は、クリア ボタンが表示されないようにします。
  • TextAlignment 型の HorizontalTextAlignment は、テキストの水平方向の配置を定義します。
  • bool 型の IsPassword は、入力されたテキストをエントリで視覚的に隠すかどうかを指定します。
  • ICommand 型の ReturnCommand は、リターン キーが押されたときに実行されるコマンドを定義します。
  • object 型の ReturnCommandParameter は、ReturnCommand のパラメーターを指定します。
  • ReturnType 型の ReturnType は、戻るボタンの外観を指定します。
  • TextAlignment 型の VerticalTextAlignment は、テキストの垂直方向の配置を定義します。

これらのプロパティは、BindableProperty オブジェクトが基になっています。つまり、これらは、データ バインディングの対象にすることができ、スタイルを設定できます。

さらに、Entry は、ユーザーがリターン キーを押して Entry 内のテキストを確定したときに発生する Completed イベントを定義します。

EntryInputView クラスから派生し、このクラスから次のプロパティを継承します。

  • double 型の CharacterSpacing は、入力されたテキストの文字間の間隔を設定します。
  • bool 型の IsReadOnly は、ユーザーがテキストを変更できないようにするかどうかを定義します。 このプロパティの既定値は false です。
  • bool 型の IsSpellCheckEnabled は、スペル チェックが有効かどうかを制御します。
  • Keyboard 型の Keyboard は、テキストを入力するときに表示されるソフト入力キーボードを指定します。
  • int 型の MaxLength は、入力の最大長を定義します。
  • string 型の Placeholder は、コントロールが空の場合に表示されるテキストを定義します。
  • Color 型の PlaceholderColor は、プレースホルダー テキストの色を定義します。
  • string 型の Text は、コントロールに入力されたテキストを定義します。
  • Color 型の TextColor は、入力したテキストの色を定義します。
  • TextTransform 型の TextTransform は、入力されたテキストの大文字と小文字を指定します。
  • double 型の CharacterSpacing は、入力されたテキストの文字間の間隔を設定します。
  • int 型の CursorPosition は、エディター内でのカーソルの位置を定義します。
  • FontAttributes 型の FontAttributes は、テキスト スタイルを決定します。
  • bool 型の FontAutoScalingEnabled は、テキストがオペレーティング システムで設定されたスケーリング設定を反映するかどうかを定義します。 このプロパティの既定値は true です。
  • string 型の FontFamily は、フォント ファミリを定義します。
  • double 型の FontSize は、フォント サイズを定義します。
  • bool 型の IsReadOnly は、ユーザーがテキストを変更できないようにするかどうかを定義します。 このプロパティの既定値は false です。
  • bool 型の IsSpellCheckEnabled は、スペル チェックが有効かどうかを制御します。
  • bool 型の IsTextPredictionEnabled は、テキスト予測と自動テキスト修正が有効かどうかを制御します。
  • Keyboard 型の Keyboard は、テキストを入力するときに表示されるソフト入力キーボードを指定します。
  • int 型の MaxLength は、入力の最大長を定義します。
  • string 型の Placeholder は、コントロールが空の場合に表示されるテキストを定義します。
  • Color 型の PlaceholderColor は、プレースホルダー テキストの色を定義します。
  • int 型の SelectionLength は、コントロール内で選択したテキストの長さを表します。
  • string 型の Text は、コントロールに入力されたテキストを定義します。
  • Color 型の TextColor は、入力したテキストの色を定義します。
  • TextTransform 型の TextTransform は、入力されたテキストの大文字と小文字を指定します。

これらのプロパティは、BindableProperty オブジェクトが基になっています。つまり、これらは、データ バインディングの対象にすることができ、スタイルを設定できます。

さらに、InputView は、Entry 内のテキストが変更されたときに発生する TextChanged イベントを定義します。 TextChanged イベントに付随する TextChangedEventArgs オブジェクトには NewTextValueOldTextValue プロパティがあり、それぞれ新しいテキストと古いテキストを指定します。

Entry でフォントを指定する方法については、「フォント」をご覧ください。

入力を作成する

次の例は、Entry を作成する方法を示しています。

<Entry x:Name="entry"
       Placeholder="Enter text"
       TextChanged="OnEntryTextChanged"
       Completed="OnEntryCompleted" />

同等の C# コードを次に示します。

Entry entry = new Entry { Placeholder = "Enter text" };
entry.TextChanged += OnEntryTextChanged;
entry.Completed += OnEntryCompleted;

次のスクリーンショットは、Android での Entry の結果を示しています。

Android 上の基本的な Entry のスクリーンショット。

Note

iOS では、ソフト入力キーボードは、フィールドが画面の下部付近にある場合にテキスト入力フィールドにかぶることがあり、テキストの入力が困難になります。 ただし、.NET MAUI iOS アプリでは、ソフト入力キーボードがテキスト入力フィールドにかぶる場合にページが自動的にスクロールされ、フィールドがソフト入力キーボードの上に配置されます。 この既定の動作は、Microsoft.Maui.Platform 名前空間内の KeyboardAutoManagerScroll.Disconnect メソッドを呼び出すことで無効にすることができます。 無効にした後、KeyboardAutoManagerScroll.Connect メソッドを呼び出すと、動作をもう一度有効にすることができます。

入力されたテキストには、Text プロパティを読み取ることでアクセスでき、TextChanged イベントと Completed イベントがテキストが変更または完了したことを通知します。

Entry 内のテキストが変更されると TextChanged イベントが発生し、TextChangedEventArgsOldTextValueNewTextValue プロパティを介して変更前後のテキストを提供します。

void OnEntryTextChanged(object sender, TextChangedEventArgs e)
{
    string oldText = e.OldTextValue;
    string newText = e.NewTextValue;
    string myText = entry.Text;
}

Completed イベントは、ユーザーがキーボードの Return キーまたは Tab キー (Windows) を押して入力を終了すると発生します。 イベントのハンドラーは、汎用イベント ハンドラーです。

void OnEntryCompleted(object sender, EventArgs e)
{
   string text = ((Entry)sender).Text;
}

Completed イベントが発生した後、ReturnCommand プロパティで指定された ICommand が実行され、ReturnCommandParameter プロパティで指定された objectReturnCommand に渡されます。

Note

Entry 継承階層にある VisualElement クラスには、FocusedUnfocused イベントもあります。

文字間隔を設定する

CharacterSpacing プロパティに double 値を設定することで、文字間隔を Entry に適用できます。

<Entry ...
       CharacterSpacing="10" />

結果として、Entry により表示されるテキスト内の文字は、デバイスに依存しない単位で CharacterSpacing の間隔が設定されます。

Note

CharacterSpacing プロパティの値は、TextPlaceholder プロパティによって表示されるテキストに適用されます。

入力の長さを制限する

MaxLength プロパティを使用すると、Entry に許可されている入力の長さを制限できます。 このプロパティは正の整数に設定する必要があります。

<Entry ...
       MaxLength="10" />

MaxLength プロパティの値が 0 の場合は、入力が許可されないことを示し、Entry の規定値である int.MaxValue の場合は、入力可能な文字数に有効な制限がないことを示します。

カーソル位置とテキスト選択の長さを設定する

CursorPosition プロパティを使用して、Text プロパティに格納されている文字列に、次の文字を挿入する位置を取得または設定できます。

<Entry Text="Cursor position set"
       CursorPosition="5" />

CursorPosition プロパティの既定値は 0 です。これは、テキストが Entry の先頭に挿入されることを示します。

さらに、SelectionLength プロパティを使用して、Entry の中でテキスト選択の長さを取得または設定できます。

<Entry Text="Cursor position and selection length set"
       CursorPosition="2"
       SelectionLength="10" />

SelectionLength プロパティの既定値は 0 です。これは、テキストが選択されていないことを示します。

クリア ボタンを表示する

ClearButtonVisibility プロパティを使用して、Entry がクリア ボタンを表示するかどうかを制御できます。ユーザーはクリア ボタンを使用してテキストをクリアできます。 このプロパティは、ClearButtonVisibility 列挙メンバーに設定する必要があります。

  • Never は、クリア ボタンが表示されないようにすることを示します。 これは、ClearButtonVisibility プロパティの既定値です。
  • WhileEditing は、フォーカスとテキストがある間に、クリア ボタンが Entry に表示されることを示します。

次の例では、プロパティの設定を示します。

<Entry Text=".NET MAUI"
       ClearButtonVisibility="WhileEditing" />

次のスクリーンショットは、Android 上の Entry でクリア ボタンが有効になっている状態を示しています。

クリア ボタンが表示された基本的な Entry のスクリーンショット (Android)。

テキストの変換

TextTransform プロパティを TextTransform 列挙型の値に設定すれば、Entry は、Text プロパティに格納されているテキストの大文字と小文字を変換できます。 この列挙型には、次の 4 つの値があります。

  • None は、テキストが変換されないことを示します。
  • Default は、プラットフォームの既定の動作を使います。 これは、TextTransform プロパティの既定値です。
  • Lowercase は、テキストが小文字に変換されることを示します。
  • Uppercase は、テキストが大文字に変換されることを示します。

次の例は、テキストを大文字に変換する方法を示しています。

<Entry Text="This text will be displayed in uppercase."
       TextTransform="Uppercase" />

テキスト入力を不明瞭にする

Entry は、IsPassword に設定されている場合、入力されたテキストを視覚的に不明瞭にする true プロパティを提供します。

<Entry IsPassword="true" />

次のスクリーンショットは、入力が不明瞭にされている Entry を示します。

IsPassword が true に設定されている基本的な Entry のスクリーンショット。

キーボードをカスタマイズする

ユーザーが Entry とやりとりする際に表示されるソフト入力キーボードは、Keyboard プロパティを使用すれば、Keyboard クラスの次のいずれかのプロパティにプログラムで設定できます。

  • Chat - 絵文字が使えるテキスト メッセージや場所に使います。
  • Default - 既定のキーボード。
  • Email - 電子メール アドレスを入力するときに使用します。
  • Numeric - 数値を入力するときに使用します。
  • Plain - KeyboardFlags を指定しないで、テキストを入力するときに使用します。
  • Telephone - 電話番号を入力するときに使用します。
  • Text - テキストを入力するときに使用します。
  • Url - ファイル パスおよび Web アドレスを入力するために使用します。

次の例では Keyboard プロパティの設定を示します。

<Entry Keyboard="Chat" />

Keyboard クラスには、大文字の設定、スペルチェック、および単語補完候補の動作を指定することで、キーボードをカスタマイズするために使用できる Create ファクトリ メソッドもあります。 KeyboardFlags 列挙値がメソッドへの引数として指定され、カスタマイズされた Keyboard が返されます。 KeyboardFlags 列挙体には次の値が含まれます。

  • None - キーボードに機能は追加されません。
  • CapitalizeSentence - 入力された各文の最初の単語の最初の文字が自動的に大文字になることを示します。
  • Spellcheck - 入力したテキストに対してスペル チェックが実行されることを示します。
  • Suggestions - 入力したテキストに対して単語補完が提供されることを示します。
  • CapitalizeWord - 各単語の最初の文字が自動的に大文字になることを示します。
  • CapitalizeCharacter - すべての文字が自動的に大文字になることを示します。
  • CapitalizeNone - 大文字の自動設定を行わないことを示します。
  • All - 入力したテキストに対して、スペルチェック、単語補完、および文への大文字の設定が行われることを示します。

次の XAML コード例は、既定の Keyboard をカスタマイズして、単語補完を提供し、入力したすべての文字を大文字に設定する方法を示しています。

<Entry Placeholder="Enter text here">
    <Entry.Keyboard>
        <Keyboard x:FactoryMethod="Create">
            <x:Arguments>
                <KeyboardFlags>Suggestions,CapitalizeCharacter</KeyboardFlags>
            </x:Arguments>
        </Keyboard>
    </Entry.Keyboard>
</Entry>

同等の C# コードを次に示します。

Entry entry = new Entry { Placeholder = "Enter text here" };
entry.Keyboard = Keyboard.Create(KeyboardFlags.Suggestions | KeyboardFlags.CapitalizeCharacter);

戻りキーをカスタマイズする

Entry にフォーカスがあるときに表示されるソフト入力キーボードの戻りキーの外観は、ReturnType プロパティを ReturnType 列挙型の値に設定して、カスタマイズできます。

  • Default: 特定の戻りキーが必要なく、プラットフォームの既定値が使用されることを示します。
  • Done: "完了" 戻りキーを示します。
  • Go: "Go" 戻りキーを示します。
  • Next: "次へ" 戻りキーを示します。
  • Search: "検索" 戻りキーを示します。
  • Send: "送信" 戻りキーを示します。

戻りキーを設定する方法を次の XAML の例に示します。

<Entry ReturnType="Send" />

Note

戻りキーの正確な外観は、プラットフォームによって異なります。 iOS では、戻りキーはテキストベースのボタンです。 ただし、Android と Windows では、戻りキーはアイコンベースのボタンです。

Return キーが押されると、Completed イベントが発生し、ReturnCommand プロパティによって指定された ICommand が実行されます。 さらに、ReturnCommandParameter プロパティで指定された object は、パラメータとして ICommand に渡されます。 コマンドの詳細については、「コマンド」をご覧ください。

ソフト入力キーボードの表示と非表示

Microsoft.Maui 名前空間の SoftInputExtensions クラスは、テキスト入力をサポートするコントロールでソフト入力キーボードとの対話をサポートする一連の拡張メソッドを提供します。 このクラスは次のメソッドを定義します。

  • IsSoftInputShowing は、デバイスが現在ソフト入力キーボードを表示しているかどうかを確認します。
  • HideSoftInputAsync は、ソフト入力キーボードが現在表示されている場合、非表示にしようとします。
  • ShowSoftInputAsync は、ソフト入力キーボードが現在非表示になっている場合、表示しようとします。

次の例は、entry という名前の Entry でソフト入力キーボードが現在表示されている場合に非表示にする方法を示しています。

if (entry.IsSoftInputShowing())
    await entry.HideSoftInputAsync(System.Threading.CancellationToken.None);

スペル チェックを有効または無効にする

IsSpellCheckEnabled プロパティは、スペル チェックを有効にするかどうかを制御します。 既定では、プロパティは true に設定されます。 ユーザーがテキストを入力すると、スペルミスが示されます。

ただし、ユーザー名の入力などの一部のテキスト入力シナリオでは、スペル チェックは否定的なエクスペリエンスを提供するため、IsSpellCheckEnabled プロパティを false に設定して無効にする必要があります。

<Entry ... IsSpellCheckEnabled="false" />

Note

IsSpellCheckEnabled プロパティが false に設定されていて、カスタム キーボードが使用されていない場合、ネイティブ スペル チェッカーは無効になります。 ただし、スペルチェックを無効にする Keyboard (Keyboard.Chat など) が設定がされている場合、IsSpellCheckEnabled プロパティは無視されます。 したがって、このプロパティを使用して、スペル チェックを明示的に無効にしている Keyboard に対してスペル チェックを有効にすることはできません。

テキスト予測を有効および無効にする

IsTextPredictionEnabled プロパティは、テキスト予測と自動テキスト修正を有効にするかどうかを制御します。 既定では、プロパティは true に設定されます。 ユーザーがテキストを入力すると、単語の予測が表示されます。

ただし、ユーザー名の入力など、一部のテキスト入力シナリオでは、テキスト予測と自動テキスト修正は否定的なエクスペリエンスを提供するため、IsTextPredictionEnabled プロパティを false に設定して無効にする必要があります。

<Entry ... IsTextPredictionEnabled="false" />

Note

IsTextPredictionEnabled プロパティが false に設定されていて、カスタム キーボードが使用されていない場合、テキスト予測と自動テキスト修正は無効になります。 ただし、テキスト予測を無効にする Keyboard が設定されている場合、IsTextPredictionEnabled プロパティは無視されます。 そのため、このプロパティを使用して、テキスト予測を明示的に無効にする Keyboard に対してテキスト予測を有効にすることはできません。

テキスト入力を禁止する

IsReadOnly プロパティを true に設定して、Entry 内のテキストをユーザーが変更できないようにすることができます。

<Entry Text="User input won't be accepted."
       IsReadOnly="true" />

Note

IsReadonly プロパティは、IsEnabled プロパティが Entry の視覚的外観を灰色に変えるのとは異なり、Entry の視覚的外観を変えることはありません。