AlertDialog
選択した値を編集できる編集可能なものを持ってSpinner
いますが、問題があります。内部の編集コントロールSpinner
は、タップ後にフォーカスを受け入れます。デバイスに物理キーボードがあれば、すべて問題ありません。しかし、キーボードがなければ...
このダイアログで仮想キーボードが表示されることはありません。ダイアログが表示された後に(スピナーリストを開かずに)強制的にキーボードを表示させても、バックグラウンドでしか表示されず、使用できません。
スピナーを使用してそのようなダイアログを表示し、標準の仮想キーボードを使用してその編集フィールドに書き込むことは可能ですか? どのように?
私のコードは次のようなものです:
final AlertDialog.Builder alertb = new AlertDialog.Builder( this );
alertb.setPositiveButton( "OK", new DialogInterface.OnClickListener() ...
alertb.setNegativeButton( "Cancel", new DialogInterface.OnClickListener() ...
final AlertDialog alert = alertb.create();
final Spinner inputSpinner = new Spinner(this);
ArrayList<String> names = new ArrayList<String>();
//... (filling 'names' here) ...
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.editforspinner, names);
adapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item );
inputSpinner.setAdapter( adapter );
inputSpinner.setSelection( 0 );
alert.setView( inputSpinner, 4, 4, 4, 4 );
alert.show();
「editforspinner」を含む xml ファイルは次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/spinnerTarget"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
私はそのようなコードでキーボードを強制します:
inputSpinner.postDelayed( new Runnable() {
@Override
public void run() {
InputMethodManager imm = (InputMethodManager) getSystemService( Context.INPUT_METHOD_SERVICE );
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_NOT_ALWAYS);
} }, 2000 );