2013年3月12日火曜日

ドロップダウンの表示(AutoCompleteTextView)


テキストにドロップダウン表示させたいときに用いるのが、AutoCompleteTextView





上の画像のように入力途中の文字から、リストを表示しております。
よく使われる文字やユーザーの入力履歴を配列に格納して表示させる方法が一般的です。


■サンプルソース

package com.example.autoocomplication;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends Activity {

  static final String[] Yamanote = {"Shinjuku", "Akihabara", "Tamachi", "Shinbashi", "Ueno", "Tokyo", "Shibuya"};  

  @Override
  protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

        //レイアウトの生成
        LinearLayout layout=new LinearLayout(getApplicationContext());
        //上から下にオブジェクトを配置するよう設定
        layout.setOrientation(LinearLayout.VERTICAL);
        //背景色を変える
        layout.setBackgroundColor(Color.DKGRAY);
        //画面表示の設定
        setContentView(layout);
//オートコンプリートテキストビューを画面に追加する
AutoCompleteTextView Actv = new AutoCompleteTextView(getApplicationContext());
//画面位置の設定
Actv.setLayoutParams(new LinearLayout.LayoutParams(300,100));
//文字色を指定
Actv.setTextColor(Color.BLACK);
//レイアウトに追加
layout.addView(Actv);

//adapterをセット
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
        getApplicationContext(), android.R.layout.simple_dropdown_item_1line, Yamanote){
@Override
public View getView(int position,View convertView,ViewGroup parent){
    //テキストビューの取得
TextView tv = (TextView)super.getView(position,convertView,parent);
//テキストの色を指定
tv.setTextColor(Color.BLACK);
  return tv;
  }
        };
  Actv.setAdapter(adapter);
  }
}



■実行結果
は上の画像で確認してください。


イメージとしては、TextViewとListViewをたして2で割る感じです。

//adapterをセット
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
  getApplicationContext(), android.R.layout.simple_dropdown_item_1line, Yamanote){

内の
android.R.layout.simple_dropdown_item_1line
は指定されているスタイルなので、何も考えずにそのまま記述で大丈夫です。
Yamanote
はマッチさせたい文字列が格納されている配列です。

ArrayAdapterはListViewでも使うので、使い方を覚えておいて損はないでしょう。

@Override
public View getView(int position,View convertView,ViewGroup parent){
  //テキストビューの取得
    TextView tv = (TextView)super.getView(position,convertView,parent);
    //テキストの色を指定
    tv.setTextColor(Color.BLACK);
    return tv;
}

この記述はドロップダウンの書式を設定しています。
たまに、ドロップダウンが表示されない!!
ってことが、ありますが、原因の多くは文字色が設定されておらず、
白色になっていることが原因です。

0 件のコメント:

コメントを投稿