Мне нравится интуитивно понятный интерфейс; каждый экран должен естественно и ненавязчиво вести пользователя к следующему шагу в приложении. За исключением этого, я стараюсь сделать вещи как можно более запутанными и запутанными.
Просто шучу :-)
У меня есть три TableRow
s, каждый из которых содержит элемент управления EditText, доступный только для чтения и не фокусируемый, а затем кнопку справа от него. Каждая кнопка запускает одно и то же действие, но с другим аргументом. Пользователь делает выбор там, и подзадача завершается, заполняя соответствующие EditText
выборы пользователя.
Это классический механизм каскадных значений; каждый выбор сужает доступные параметры для следующего выбора и т. д. Таким образом, я отключаю оба элемента управления в каждой из следующих строк, пока EditText в текущей строке не будет содержать значение.
Мне нужно сделать одно из двух в следующем порядке:
- При нажатии кнопки сразу же убирать фокус, не устанавливая фокус на другую кнопку.
- Установите фокус на первую кнопку при запуске действия
Проблема проявляется после возвращения подактивности; нажатая кнопка сохраняет фокус.
Re: # 1 выше - похоже, нет removeFocus()
метода или чего-то подобного
Re: # 2 выше - я могу использовать requestFocus()
для установки фокуса на кнопку в следующей строке, и это работает после возврата под-активности, но по какой-то причине это не работает в родительской активности onCreate()
.
Мне нужна согласованность пользовательского интерфейса в любом направлении - либо кнопки не имеют фокуса после завершения субдействия, либо каждая кнопка получает фокус в зависимости от своего места в логическом потоке, включая самую первую (и единственную) активную кнопку до любого выбора.
источник
Старый вопрос, но я столкнулся с ним, когда у меня была аналогичная проблема, и подумал, что поделюсь тем, чем я закончил.
Вид, который привлекал внимание, каждый раз отличался, поэтому я использовал очень общий:
источник
getCurrentFocus()?.clearFocus();
, так красиво и элегантно: - /Вы можете использовать
View.clearFocus()
.Использование
View.requestFocus()
вызвано изonResume()
.источник
android:descendantFocusability="beforeDescendants"
использование следующего в упражнении с некоторыми вариантами макета, приведенными ниже, похоже, работает должным образом.
в связи со следующими параметрами в корневом представлении.
https://developer.android.com/reference/android/view/ViewGroup#attr_android:descendantFocusability
Ответ спасибо: https://forums.xamarin.com/discussion/1856/how-to-disable-auto-focus-on-edit-text
О windowSoftInputMode
источник
Я использую это, когда уже закончил обновление информации профиля и убираю весь фокус с EditText в моем макете
====> Обновление: в содержимом родительского макета моя строка добавления EditText:
источник
Как насчет того, чтобы просто добавить
android:windowSoftInputMode="stateHidden"
свою активность в манифест.Взято у умного человека, комментирующего это: https://stackoverflow.com/a/2059394/956975
источник
Во-первых, будет 100% работать ........
onResume()
метод.onResume()
найдите вид, который фокусируется снова и сноваfindViewById()
.onResume()
набораrequestFocus()
для этого представления.onResume()
набораclearFocus
для этого представления.focusable
true иfocusableInTuch
true.onResume()
найдите вид сверху, сделанныйfindViewById
onResume()
установленrequestFocus()
этот вид.источник
Я попытался отключить и включить фокусировку для просмотра, и у меня это сработало (фокус был сброшен):
источник
Вы можете попробовать отключить возможность основного Activity сохранять свое состояние (таким образом, заставляя его забыть, какой элемент управления имеет текст, а какой - фокус). Вам понадобится другой способ запомнить, что есть у вашего EditText, и повторно заполнить их onResume (). Запустите свои дочерние действия с помощью startActivityForResult () и создайте обработчик onActivityResult () в своем основном действии, который будет правильно обновлять EditText. Таким образом, вы можете установить правильную кнопку, на которой вы хотите сфокусироваться наResume (), в то же время, когда вы повторно заполняете EditText, используя myButton.post (new Runnable () {run () {myButton.requestFocus ();}});
Метод View.post () полезен для первоначальной установки фокуса, потому что этот runnable будет выполнен после того, как окно будет создано и все успокоится, позволяя механизму фокуса нормально функционировать к этому времени. Я обнаружил, что при попытке установить фокус во время onCreate / Start / Resume () обычно возникают проблемы.
Обратите внимание, что это псевдокод и не проверено, но это возможное направление, которое вы можете попробовать.
источник
Добавьте их в свою ViewGroup, которая включает ваш EditTextView. Он правильно работает с моим макетом ограничений. Надеюсь на эту помощь
источник
Попробуйте следующее (звонок
clearAllEditTextFocuses();
)источник