2011年10月2日日曜日

EditableなSpinner

1つ前の投稿で作成した拡張子とContent-TypeのDBを 利用するためにこんな↓感じの画面を加えました。  

ここから、新しく追加、変更を設定するダイアログで、 直接入力が可能なSpinnerを作ってみようと思いました。

で、できたのがコレ↓


ちょっと画像ではわかりにくいですね。
作成方法はSpinnerに設定するアダプタに対して

作成時、EditTextのレイアウトを食わせる
setDropDownViewResourceでテキストのレイアウトを設定する

な感じの操作をする。
具体的にはこんな感じ。

    //Spinnerの設定
    Spinner spn = (Spinner)inputView.findViewById(id.spinnerType);

    //Spinnerに設定するアダプタのレイアウトをEditTextのレイアウトで作成する
    //指定している [dialog_spinner_layout]はホントにEditTextだけのレイアウト
    ArrayAdapter adp = ArrayAdapter.createFromResource(parentAct.getApplicationContext(),
            R.array.MimeTypeArray,R.layout.dialog_spinner_layout);

    //ドロップダウンのレイアウトをTextView?のレイアウトで作成する
    // android.R.layout.simple_dropdown_item_1line はandroid側で定義済みのレイアウト
    // 普通にTextViewを指定するとドロップダウンで表示されたものがはみ出ることがある
    adp.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);

    spn.setAdapter(adp);

取りあえず一応できました。
が、細かいところの設定が色々難しい。

初期値として、EditTextの文字列を変更させようかと思ったのですが、どうやっても初期化時に、EditTextが取得できない。
表示後なら、
spinner.getSelectedView();
でEditTextを取得できるのですが。。。

やっぱり素直にAutoCompleteTextViewクラスで作成するべき、というのが今回の結論でした。

0 件のコメント: