Xamarin.Formsアプリでは、テキスト入力用のコントロールとしてEntry/Editor/SearchBarの3種類を利用できる。
対象:Visual Studio 2015以降
Xamarin.Formsでテキストを入力するUI(ユーザーインタフェース)を作るとき、利用できる3種類のUIコントロールがある*1。また、それらにはさまざまなオプションがある。本稿では、それら3種類のテキスト入力コントロールの使い方を紹介する*2。
*1 この他に、本稿では扱わないが、Tableコントロール内で使うためのEntryCellコントロール(Xamarin.Forms名前空間)もある。
*2 本稿で使用したXamarin.Formsのバージョン
Xamarin 4.2.1.60 (47830f6)/Xamarin.Forms 2.2.0.45
テキスト入力を行うためのコントロールには次の3つがある。
次の画像に、3つのコントロールの表示例を示す。
これら3つのコントロールには、以下のような特有なプロパティがある。
Entryコントロールだけが持っている。trueにすると、入力した文字が「●」などで表示される。
EntryコントロールとSearchBarコントロールが持っている。文字列を設定しておくと、テキスト未入力時に表示される。
EntryコントロールとEditorコントロールが持っている。キーボードを切り替えたり自動スペルチェックを有効にしたりする。その効果は、デバイスによって異なる。
Keyboardプロパティには、Keyboardクラス(Xamarin.Forms名前空間)のインスタンスを設定する。既定で用意されている6種類のインスタンス(Chat/Email/Numeric/Telephone/Text/Url)のいずれかを指定するか、Createメソッドを使ってKeyboardインスタンスを作って与える。
次からの画像に、Keyboardプロパティの効果を幾つか示す。
実際の例として、以上で説明したコードを試してみよう。
ソリューションを新しく作るときに[Blank Xaml App (Xamarin.Forms Portable)]を選ぶ。以下ではソリューション名(=PCLプロジェクトの名前)は「dotNetTips1168」としている。
そうしたら、PCLプロジェクトにあるMainPage.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"
xmlns:local="clr-namespace:dotNetTips1168"
x:Class="dotNetTips1168.MainPage">
<ContentPage.Padding>
<OnPlatform x:TypeArguments="Thickness" iOS="0,20,0,0" />
</ContentPage.Padding>
<ContentPage.Resources>
<ResourceDictionary>
<Style TargetType="Label">
<Setter Property="HorizontalOptions" Value="End" />
<Setter Property="VerticalOptions" Value="Center" />
<Setter Property="FontSize" Value="Medium" />
</Style>
<Style TargetType="Entry">
<Setter Property="TextColor" Value="Accent" />
<!-- TextColor未指定だと、UWPでアンフォーカス時にテキストが消える -->
</Style>
</ResourceDictionary>
</ContentPage.Resources>
<Grid HorizontalOptions="Center" VerticalOptions="Center"
WidthRequest="320" RowSpacing="20">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<!-- Entryコントロールの例 -->
<Label Text="Entry" />
<Entry Grid.Column="1" Placeholder="(default)" />
<Label Grid.Row="1" Text="Entry" />
<Entry Grid.Row="1" Grid.Column="1"
IsPassword="True" Placeholder="(Password)" />
<Label Grid.Row="2" Text="Entry" />
<Entry Grid.Row="2" Grid.Column="1"
Placeholder="(Numeric)" Keyboard="Numeric" />
<Label Grid.Row="3" Text="Entry" />
<Entry Grid.Row="3" Grid.Column="1" Placeholder="(Url)" Keyboard="Url" />
<!-- Editorコントロールの例 -->
<Label Grid.Row="4" Text="Editor" />
<Editor x:Name="Editor1" Grid.Row="4" Grid.Column="1" HeightRequest="80" />
<!-- SearchBarコントロールの例 -->
<Label Grid.Row="5" Text="SearchBar" />
<SearchBar Grid.Row="5" Grid.Column="1" Placeholder="(SEARCH)" />
</Grid>
</ContentPage>
KeyboardクラスのCreateメソッドを使ってKeyboardインスタンスを作る方法は、コードビハインドで行う。MainPage.xaml.csファイルのコンストラクタに、次のコードのように追加する。
public MainPage()
{
InitializeComponent();
Editor1.Keyboard
= Keyboard.Create(KeyboardFlags.CapitalizeSentence
| KeyboardFlags.Spellcheck);
}
以上で完成だ。実行してみると次の画像のようになる。
1行入力にはEntryコントロールを、複数行入力にはEditorコントロールを使う。また、検索にはSearchBarコントロールが適している。
EntryコントロールとEditorコントロールのKeyboardプロパティには、さまざまな効果がある。デバイスや言語設定によってその効果は変わってくるので、実際に試してから使おう。
利用可能バージョン:Visual Studio 2015以降
カテゴリ:Xamarin 処理対象:Xamarin.Forms
関連TIPS:Xamarin.Forms:プロジェクトにXamlページを追加するには?
関連TIPS:Xamarin.Forms:プラットフォームに応じて画面の一部を変えるには?
関連TIPS:Xamarin.Forms:プラットフォームに応じたフォントサイズを指定するには?
Copyright© Digital Advantage Corp. All Rights Reserved.