#java #android
#java #Android
Вопрос:
Я пытаюсь создать AlertDialog, динамически соответствующий количеству строк в W.englishList. Я добавляю EditTexts в макет сетки таким образом :
final Activity act = this;
GridLayout lay = new GridLayout(act);
lay.setOrientation(GridLayout.VERTICAL);
int row = 1;
for (String i : W.englishList) {
EditText text = new EditText(act);
text.setText(i);
LayoutParams p = new GridLayout.LayoutParams();
p.bottomMargin = 5;
p.width = GridLayout.LayoutParams.WRAP_CONTENT;
p.columnSpec = GridLayout.spec(0);
p.rowSpec = GridLayout.spec(tmp);
text.setLayoutParams(p);
lay.addView(text);
row ;
}
//Some AlertDialog.setContentView(lay);
Все работает, за исключением того, что я не могу редактировать созданные Editexts, я могу сфокусировать их, скопировать их, но я не могу их редактировать (клавиатура не отображается), есть идеи?
Редактировать: я могу скопировать вставку в них.
Ответ №1:
Это происходит потому, что allert dialog блокирует клавиатуру. Вы всегда можете показывать клавиатуру:
alertDialog.getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
или установите OnTouchListener для каждого EditText и покажите клавиатуру при касании:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
и скрыть его:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(input.getWindowToken(), 0);
Комментарии:
1. Это кажется странным, потому что у меня в приложении есть другое диалоговое окно с предупреждением, запрашивающее ввод текста, и клавиатура действительно отображается. Мне интересно, связано ли это с тем, что в другом диалоговом окне я создал окно с файлом XML?
2. Возможно, клавиатура устанавливается автоматически с помощью xml. Сейчас у меня нет возможности протестировать диалоговое окно оповещения с / без xml, но когда у меня была похожая проблема, я решил ее этим методом. Однако у меня был только один TextEdit, поэтому было проще установить OnTouchListener.