次の方法で共有


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 プロパティの値は、TextPlaceholder プロパティによって表示されるテキストに適用されます。

エディターの自動サイズ設定

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>

BackgroundColor を使用したエディターの例

選択した背景とテキストの色が各プラットフォームで使用できること、そしてプレースホルダー テキストが隠れていないことを確認します。

イベントと対話機能

Editor は、次の 2 つのイベントを公開します。

  • TextChanged – エディターでテキストが変更されたときに発生します。 変更の前後のテキストを提供します。
  • Completed – ユーザーがキーボードのリターン キーを押して入力を終了したときに発生します。

Note

Entry の継承元である VisualElement クラスにも、FocusedUnfocused イベントがあります。

完了済み

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 は、EditorText が変更されるたびに発生します。 イベントのハンドラーは、TextChangedEventArgs のインスタンスを受け取ります。 TextChangedEventArgs では、OldTextValueNewTextValue プロパティを使用して、EditorText の古い値と新しい値にアクセスできます。

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>