Я хочу отключить все элементы управления вводом (например, TextEdit, Spinners) одним нажатием кнопки.
Например: когда пользователь вводит значение в текстовое поле и нажимает кнопку «Отправить», я бы хотел отключить все элементы управления вводом и скрыть клавиатуру.
Для предотвращения доступа пользователя к экрану может быть добавлен оверлейный вид поверх активности, но это не вариант, так как я хочу отключить все компоненты ввода и скрыть элементы управления вводом.
Итерируйте представление макета контейнера и обработайте представления в зависимости от того, какой виджет они являются экземплярами. Например, если вы хотите скрыть всю Button
и отключить все EditText
:
for(int i=0; i < layout.getChildCount(); i++) { View v = layout.childAt(i); if (v instanceof Button) { v.setVisibility(View.GONE); //Or View.INVISIBLE to keep its bounds }else if (v instanceof EditText) { ((EditText)v).setEnabled(false); } }
Конечно, если вы хотите добавить другие свойства, например, сделать его не кликабельным или тем, что вы просто добавили в корреспондент, если из предыдущего кода.
Затем, чтобы скрыть клавиатуру :
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
Более чистый способ сделать это (если вы знаете идентификаторы представлений) заключается в том, чтобы хранить их в int[]
и в цикле, вместо того, чтобы получать изображения из дочерних элементов из макета, но по мере их достижения они почти то же.
Попробуйте использовать editText.setEnabled(false);
Просто установите setEnabled(false);
Для всех элементов управления внутри кнопки нажмите.
buttonOK.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub editText.setEnabled(false); spinner.setEnabled(false); ....... // here you can disable all InputControls. } });
Возьмем случай TextView. Затем сделайте следующее:
textView.setClickable(false); textView.setFocusable(false); textView.setFocusableInTouchMode(false);
Это отключит TextView. Аналогично для остальных согласно требованию.