新人成長記録23th
本日はAutoCompleteTextViewを紹介していこうと思います
名前から非常に便利かと思いましたが、実際使ってみるとそうでもないように思えました
AutoCompleteTextViewとは
AutoCompleteTextViewは、入力した値をもとに、いくつかの候補を出すようなビューなのですが、この候補は自分で用意しないといけません
使い方としては、過去の入力値をDB等で持っていて、DBから引き出して候補を作成するのがいいのでしょうか
1から10まで手打ちは、とても手間だと思います
今回は、どのようなものかを知るためのものなので、候補は少なく、手打ちで用意しました
実装
初めに、レイアウトを用意します
レイアウトはアクティビティと、候補表示の2つになります
アクティビティのレイアウトです
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="都道府県:"
/>
<AutoCompleteTextView
android:id="@+id/textview_autocomplete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
/>
</LinearLayout>
TextViewは、なにを入力してもらうかの誘導です
今回は、都道府県としています
AutoCompleteTextViewは、TextViewとありますがEditTextを拡張しているので入力ができます
私は、EditTextを拡張しているのにTextView?となりました
次に、候補表示のレイアウトです
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
このレイアウトは、候補として表示される1行分のレイアウトです
これで下準備は完了です
あとはアクティビティのプログラムを組んでいきます
public class AutoCompleteActivity extends Activity {
//候補の配列
static final String[] Prefectures = new String[]{
"大阪",
"大分",
"京都",
"Osaka",
"Kyoto"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_autocmplete);
AutoCompleteTextView autoCompleteTextView =
(AutoCompleteTextView) findViewById(R.id.textview_autocomplete);
ArrayAdapter adapter =
new ArrayAdapter(this, R.layout.autocomplete_layout, Prefectures);
autoCompleteTextView.setAdapter(adapter);
//何文字目から候補を出すか
autoCompleteTextView.setThreshold(1);
}
}
setThresholdは、何文字入力したら候補がでるのかを、指定することできます
日本語だと漢字の候補が多く、入力したそばから候補が出てこないので、不便に感じました
入力中の平仮名から漢字の候補を出すような仕組みが欲しいですが、実装には辞書の作成などが必要となるので、難しいと思います
終わりに
便利と思って使って見ましたが、使い始めでは便利さは感じませんでした
私は、View自体に候補が用意されていて、それを使うと思っていました
公式を見て、候補は自分で用意しているのを見て少し残念でした
しかし、入力値をDBに保存して、その値を使用して使い込むことで便利になっていくものだと思います
火曜日担当:poppy
admin at 2017年04月18日 10:00:37