- android edittext удалить Фокус после нажатия кнопки
- 8 ответов
- Android edittext удаляет фокус после нажатия кнопки
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
- Ответ 5
- Ответ 6
- Ответ 7
- Ответ 8
- Ответ 9
- android edittext удалить Фокус после нажатия кнопки
- 8 ответов
- Как удалить фокус без установки фокуса на другой элемент управления?
- Grouping non-focusable content with android:focusable shouldn’t be recommended #4
- Comments
- renatoi commented Nov 29, 2016
- Focus navigation vs Accessibility Focus
- The problem
- Solutions
- Focus behavior in a ViewGroup
- What’s the focus behavior for focus navigation (Keyboard)?
- What’s the accessibility focus behavior?
- Solutions
android edittext удалить Фокус после нажатия кнопки
У меня есть действие с EditText и кнопкой. Когда пользователь нажимает на EditText, отображается клавиатура, и он может ввести текст — отлично. Но когда пользователь нажимает на кнопку, Я хочу, чтобы EditText больше не был в фокусе, т. е. клавиатура скрывается, пока пользователь снова не нажмет на EditText.
что я могу сделать, чтобы «скрыть фокус» EditText после нажатия кнопки. Некоторый код я могу добавить в метод OnClick кнопки, чтобы сделать это?
С Наилучшими Пожеланиями
8 ответов
поместите это в прослушиватель кнопок:
редактировать
решение выше сломает ваше приложение, если нет EditText ориентирован на. Измените свой код следующим образом:
добавить этот метод в класс:
затем в прослушивателе кнопок вызовите метод следующим образом:
создать поддельный вид, чтобы получить фокус, когда вы пытаетесь clearFocus в своем edittext :
обратите внимание, что этот вид не требует места в макете, поэтому он не имеет значения с вашим макетом.
в классе управления, называют это:
о клавиатуре, скрыть клавиатуру после edtThief имеет фокус.
Я успешно использовал следующее в коде кнопки onClick:
несколько менее сложные, чем другие методы.
самое элегантное решение, которое я мог найти, это:
вы можете сохранить этот метод в служебный класс:
просто вызвав метод hideSoftKeyboad (), он скроет клавиатуру, но, как вы можете видеть, фокус все равно будет присутствовать.
для того, чтобы удалить фокус мы будем использовать простой трюк. Прямо над элементами управления вводом добавьте фиктивный вид, например:
затем написать эту строку кода в том месте, где вы называете метод скрытия фокуса:
поскольку приложение должно передать фокус на следующий элемент управления, он будет передан нашему невидимому виду.
Источник
Android edittext удаляет фокус после нажатия кнопки
У меня есть Activity с EditText и Button. Когда пользователь нажимает на EditText, отображается клавиатура, и он может вводить текст Text — fine. Но когда пользователь нажимает кнопку «Я», я хочу, чтобы EditText больше не был в фокусе, т.е. Клавиатура скрывается, пока пользователь не нажмет на EditText.
Что я могу сделать, чтобы «скрыть фокус» EditText, после нажатия кнопки. Некоторый код, который я могу добавить в метод OnClick кнопки для этого?
С наилучшими пожеланиями
ОТВЕТЫ
Ответ 1
Поместите это в свой прослушиватель кнопок:
EDIT
Решение, описанное выше, сломает ваше приложение, если не сосредоточено EditText . Измените свой код следующим образом:
добавьте этот метод в класс:
Затем в своем прослушивателе кнопок вызовите метод следующим образом:
Ответ 2
Я успешно использовал следующее в коде кнопки onClick:
Несколько менее сложно, чем другие методы.
Ответ 3
Одним из обходных путей является создание фальшивого представления для переноса фокуса при clearFocus в edittext :
Обратите внимание, что этот вид невидим, поэтому он не требует места в макете.
В классе элемента управления вы можете добавить метод, подобный следующему, чтобы инициировать эту передачу фокуса:
Затем вы можете свернуть клавиатуру, как только у edtThief будет фокус:
Ответ 4
Самое элегантное решение, которое я могу найти, это:
Вы можете сохранить этот метод в своем классе:
Просто вызов метод hideSoftKeyboad(), он скроет клавиатуру, но, как вы можете видеть, фокус все равно будет присутствовать.
Чтобы удалить фокус, мы будем использовать простой трюк. Прямо над элементами управления вводами добавьте фиктивный вид:
Затем напишите эту строку кода в том месте, где вы вызываете метод сглаживания фокуса:
Поскольку приложение должно передать фокус на следующий элемент управления, он будет передан нашему невидимому виду.
Ответ 5
EDIT:
Ответ 6
Ответ 7
Извините поздно, но я надеюсь, что это будет правильный ответ, поскольку я исправил его с помощью
Назовите следующий фрагмент нажатием кнопки.
Ответ 8
Как я это решил.
Я надеюсь, что это поможет вам 🙂
Ответ 9
Почему бы просто отключить EditText в коде Button? Это должно избавиться от клавиатуры и фокуса.
Источник
android edittext удалить Фокус после нажатия кнопки
У меня есть действие с EditText и кнопкой. Когда пользователь нажимает на EditText, отображается клавиатура, и он может ввести текст — отлично. Но когда пользователь нажимает на кнопку, Я хочу, чтобы EditText больше не был в фокусе, т. е. клавиатура скрывается, пока пользователь снова не нажмет на EditText.
что я могу сделать, чтобы «скрыть фокус» EditText после нажатия кнопки. Некоторый код я могу добавить в метод OnClick кнопки, чтобы сделать это?
С Наилучшими Пожеланиями
8 ответов
поместите это в прослушиватель кнопок:
редактировать
решение выше сломает ваше приложение, если нет EditText ориентирован на. Измените свой код следующим образом:
добавить этот метод в класс:
затем в прослушивателе кнопок вызовите метод следующим образом:
создать поддельный вид, чтобы получить фокус, когда вы пытаетесь clearFocus в своем edittext :
обратите внимание, что этот вид не требует места в макете, поэтому он не имеет значения с вашим макетом.
в классе управления, называют это:
о клавиатуре, скрыть клавиатуру после edtThief имеет фокус.
Я успешно использовал следующее в коде кнопки onClick:
несколько менее сложные, чем другие методы.
самое элегантное решение, которое я мог найти, это:
вы можете сохранить этот метод в служебный класс:
просто вызвав метод hideSoftKeyboad (), он скроет клавиатуру, но, как вы можете видеть, фокус все равно будет присутствовать.
для того, чтобы удалить фокус мы будем использовать простой трюк. Прямо над элементами управления вводом добавьте фиктивный вид, например:
затем написать эту строку кода в том месте, где вы называете метод скрытия фокуса:
поскольку приложение должно передать фокус на следующий элемент управления, он будет передан нашему невидимому виду.
Источник
Как удалить фокус без установки фокуса на другой элемент управления?
Мне нравятся мои интуитивные интерфейсы; Каждый экран должен естественным образом и ненавязчиво направлять пользователя на следующий шаг в приложении. Не допуская этого, я стараюсь сделать вещи такими же запутанными и запутанными, насколько это возможно.
У меня есть три TableRows, каждый из которых содержит только элемент управления EditText для чтения и без фокусировки, а затем кнопку справа. Каждая кнопка запускает ту же самую активность, но с другим аргументом. Пользователь делает выбор, а суб-активность завершается, заполняя соответствующий EditText выбором пользователя.
Это классический механизм каскадных значений; Каждый выбор сужает доступные параметры для следующего выбора и т. Д. Таким образом, я отключу оба элемента управления в каждой из следующих строк до тех пор, пока EditText в текущей строке не будет содержать значение.
Мне нужно сделать одну из двух вещей в этом порядке предпочтения:
- Когда нажата кнопка, немедленно удалите фокус, не устанавливая фокус на другую кнопку
- Установите фокус на первую кнопку при запуске
Проблема проявляется после возвращения суб-активности; Кнопка, нажатая, удерживает фокус.
Re: # 1 выше – не существует метода removeFocus (), или что-то похожее
Re: # 2 выше – я могу использовать requestFocus (), чтобы установить фокус на кнопку в следующей строке, и это работает после возвращения суб-активности, но по какой-то причине оно не работает в onCreate () родительской активности.
Мне нужно согласованность пользовательского интерфейса в любом направлении – либо никакие кнопки не имеют фокуса после завершения суб-активности, либо каждая кнопка получает фокус в зависимости от своего места в логическом потоке, включая самую первую (и только) активную кнопку перед любым выбором.
Использование clearFocus (), похоже, не работало для меня так, как вы нашли (увидели в комментариях к другому ответу), но то, что сработало для меня в конце, добавляло:
На мой самый верхний вид Layout View (линейный макет). Чтобы удалить фокус со всех кнопок / EditTexts и т. Д., Вы можете просто сделать
Задание фокуса ничего не делало, если я не настроил представление на фокус.
Старый вопрос, но я наткнулся на него, когда у меня была подобная проблема, и я подумал, что поделюсь тем, что я закончил.
Взгляд, который получил фокус, был разным каждый раз, поэтому я использовал очень общий:
Вы можете использовать View.clearFocus() .
Используйте View.requestFocus() вызванный onResume() .
Как насчет добавления android:windowSoftInputMode=»stateHidden» в вашей активности в манифесте.
Прежде всего, это будет 100% работать ……..
- Создайте onResume() .
- Внутри этого onResume() найдите представление, которое фокусируется снова и снова на findViewById() .
- Внутри этого onResume() установите requestFocus() в это представление.
- Внутри этого onResume() установите clearFocus на это представление.
- Перейдите в xml того же макета и найдите тот вид сверху, который вы хотите сфокусировать, и установите focusable true и focusableInTuch true.
- Внутри этого onResume() найдите вышеуказанный вид сверху findViewById
- Внутри этого onResume() установите requestFocus() на это представление в последний раз.
- И теперь наслаждайтесь ……
Я использую это, когда уже закончена информация об обновлении профиля и удаляет весь фокус с EditText в моем макете
====> Обновление: в родительском макете моя строка добавления EditText:
Вы могли бы попытаться отключить способность основной активности сохранить свое состояние (таким образом, заставив его забыть, какой элемент управления имел текст и какой фокус). Вам понадобится другой способ запоминания того, что у вашего EditText есть, и повторного их заполнения onResume (). Запустите свои суб-действия с помощью startActivityForResult () и создайте обработчик onActivityResult () в своей основной деятельности, который будет правильно обновлять EditText. Таким образом, вы можете установить нужную кнопку, которую хотите сфокусировать на Resume (), в то же время, когда вы повторно заселяете EditText, используя myButton.post (новый Runnable ()
Метод View.post () полезен для настройки фокуса изначально, потому что эта runnable будет выполняться после создания окна, и все оседает, позволяя механизму фокусировки функционировать должным образом к тому времени. Попытка установить фокус во время onCreate / Start / Resume () обычно имеет проблемы, я нашел.
Обратите внимание, что это псевдокод и не проверенный, но это возможное направление, которое вы могли бы попробовать.
Я попытался отключить и включить фокусировку для просмотра, и это сработало для меня (фокус был сброшен):
Источник
Grouping non-focusable content with android:focusable shouldn’t be recommended #4
Comments
renatoi commented Nov 29, 2016
First of all, I appreciate all the work Google is putting together about accessibility. It’s great to have more materials about Android Accessibility.
I’m an accessibility professional myself that have been working closely with Android applications. I’d like to share a few thoughts/problems about the subject of grouping content.
Focus navigation vs Accessibility Focus
Here’s a quick definition before we continue:
Focus navigation: Similar to desktop keyboard navigation (tab, arrows keys, enter, esc). Keyboard or Directional Pad users. Focus is placed only on items that require user interaction (e.g. clickable views or buttons, inputs like EditText , CheckBox , Switch , etc).
Accessibility Focus: Focus for accessibility services, primarily screen readers such as TalkBack. Focus is placed on all meaningful views of the screen, including non-focusable views such as TextView or ImageView , which has either text or content descriptions.
The problem
Google has been advocating a technique to group non-focusable items by using android:focusable=»true» to the parent ViewGroup so that its contents are read all at once for screen reader users.
You can see this recommendation in one of the Google Code Labs courses.
While grouping content is good for screen reader users, it creates a problem for keyboard users.
The problem is that android:focusable is meant for focus navigation and not accessibility focus. The consequences are:
- Views with no user interaction will now have focus via keyboard navigation. For example, focus on a ViewGroup that only has text views and no actions.
- These views will probably not have a focusable indicator (added as a StateListDrawable). Keyboard users won’t be able to tell where the focus is at anymore. Even if we add a focusable indicator to these views, there is still no reason to have focus on TextViews for example.
Solutions
Unless if the statements above are wrong, then I recommend the following:
- Make it more evident the distinction between focus navigation and accessibility focus in Google’s documentation and training material. I believe this distinction is only mentioned here in the notes.
- Suggest using android:importantForAccessibility instead of android:focusable. The only drawback is the API level since it was only introduced at API 16.
Focus behavior in a ViewGroup
Regardless of the issue mentioned above, there’s an interesting thing about allowing a ViewGroup to receive focus. Consider the following code:
What’s the focus behavior for focus navigation (Keyboard)?
- Focus moves to the LinearLayout .
- Focus moves to the Button .
This is the expected behavior since we’ve asked for the LinearLayout to receive focus.
What’s the accessibility focus behavior?
- Focus moves to the LinearLayout , announcing all its text content except for the Button text: «Heading one, Heading Two».
- Focus moves to the Button , announcing the button: «Action, Button».
This creates a problem since the order here matters and the original order is different then the one being announced.
Solutions
There are two ways that developers have been solving this issue:
- Remove android:focusable from the container (no need to group text content if they are separated by focusable views) or.
- Add android:focusable to the two TextView inside.
Removing android:focusable from the container is not always an option and having focus on a container can actually be important. For example, a ViewPager will announce that you are on a multi-page view, which page it is currently displaying, and allowing us to use gestures or keyboard arrows to switch pages. We still want to keep this behavior. ViewPager is a very popular widget and it is quite common to find this problem on many Android apps.
Adding android:focusable to the two TextView is a solution but it makes non-focusable views now focusable to keyboard users (the issue mentioned at the beginning). For ViewPager , developers must also provide at least an android:contentDescription to the ViewPager , otherwise the it won’t gain focus since it has no description.
Adding android:importantForAccessibility=»yes» to the two TextView doesn’t help since they are already set to yes by default. What dictates the accessibility focus behavior here is wether child views is focusable or not.
Luckily, we can set a view focusable only to accessibility services. To do this, we have to set to true the setFocusable(boolean focusable) method in the AccessibilityNodeInfo using an accessibility delegate instead of the setFocusable(boolean focusable) from a View.
It would be better, though, if Android could provide something like android:accessibilityFocusable . There could be other options like changing TalkBack behavior or fixing the most popular ViewGroup s like ViewPager , RecyclerView , etc.
I’m looking for a feedback on this, see if any of my suggestions or assumptions are wrong, or even the possibility of Google to implement any of the suggestions.
The text was updated successfully, but these errors were encountered:
Источник