У меня есть Activity
где 5 EditText
с. Когда пользователь нажимает на первую EditText
, открывается программная клавиатура, чтобы ввести в нее некоторое значение. Я хочу установить View
видимость некоторых других, Gone
когда программная клавиатура открывается, а также когда пользователь нажимает на первую, EditText
а также когда программная клавиатура закрывается от нее EditText
при нажатии кнопки «назад». Затем я хочу установить View
видимость некоторых других видимым.
Есть ли какой-нибудь слушатель, или обратный вызов, или какой-нибудь хак для того, когда программная клавиатура открывается нажатием на первую EditText
в Android?
trying to detect the virtual keyboard height in Android.
X
иY
местоположение находятся на / над клавиатурой =>SecurityException
=> уменьшитьY
и попробовать еще раз =>, пока не будет выброшено исключение => текущееY
значение - высота клавиатуры. 2. если клавиатура не открыта => нетSecurityException
.SecurityException
брошено => клавиатура открыта. Иначе клавиатура закрыта.EditText
не для другихEditText
. Как я могу это различить?Ответы:
Это работает только тогда, когда
android:windowSoftInputMode
ваша активность установленаadjustResize
в манифесте. Вы можете использовать прослушиватель макетов, чтобы узнать, изменился ли размер корневого макета вашей деятельности с помощью клавиатуры.Я использую что-то вроде следующего базового класса для своей деятельности:
В следующем примере упражнения используется это, чтобы скрыть представление, когда клавиатура отображается, и снова показать его, когда клавиатура скрыта.
XML-макет:
И активность:
источник
rootLayout = (ViewGroup) findViewById(R.id.rootLayout);
?Кусок пирога с потрясающей библиотекой KeyboardVisibilityEvent
Кредиты для Ясухиро ШИМИЗУ
источник
Как отметил Викрам в комментариях, обнаружение, отображается ли программная клавиша или исчезла, возможно только с некоторыми уродливыми взломами.
Может быть, достаточно установить фокус слушателя на текст редактирования :
источник
setOnFocusChangeListener
слушатель, затем я нажимаю его, затем он закрывает клавиатуру, но не нажимает на другие представления, теперь снова я нажимаю на тот же текст редактирования, который уже имеет фокус, что произойдет?onFocusChange()
это не будет называться.Для деятельности:
Для фрагмента:
источник
android:windowSoftInputMode="adjustResize"
в манифесте?Ответ Jaap не будет работать для AppCompatActivity. Вместо этого получите высоту строки состояния, панели навигации и т. Д. И сравните с размером окна вашего приложения.
Вот так:
источник
Можешь попробовать:
источник
Вы можете использовать мою функцию расширения Rx (Kotlin).
Пример:
источник
dip()
иgetScreenHeight()
Приведенный ниже код работает для меня,
источник
Если вы можете, попробуйте расширить EditText и переопределить метод «onKeyPreIme».
Как вы можете продлить это:
Я думаю, что пересчет высоты экрана не на 100% успешен, как упоминалось ранее. Чтобы было ясно, переопределение onKeyPreIme не вызывается для программ «скрыть программную клавиатуру программно», НО, если вы делаете это где-либо, вы должны выполнять там логику «onKeyboardHidden» и не создавать комплексных решений.
источник
источник
setOnFocusChangeListener
слушатель, затем я нажимаю его, затем он закрывает клавиатуру, но не нажимает на другие представления, теперь снова я нажимаю на тот же текст редактирования, который уже имеет фокус, что произойдет?onfocus
слушатель никогда не звонит. Я смотрю не так, как вы предлагаетеИспользуйте этот класс,
Во
Android Manifest
,android:windowSoftInputMode="adjustResize"
необходимо.PS - Полностью взято отсюда .
источник
Для случая
adjustResize
и FragmentActivity принятое решение от @Jaap не работает для меня.Вот мое решение:
источник
Другой подход заключается в проверке, когда пользователь перестал печатать ...
Когда TextEdit находится в фокусе (пользователь печатает / набирает текст), вы можете скрыть представления (слушатель фокуса)
и используйте Handler + Runnable и слушатель изменения текста, чтобы закрыть клавиатуру (независимо от ее видимости) и показать представления после некоторой задержки.
Главное, на что нужно обратить внимание - это задержка, которую вы используете, которая будет зависеть от содержимого этих TextEdits.
источник
Этот код прекрасно работает
используйте этот класс для корневого просмотра:
}
и установите слушателя клавиатуры в деятельности или фрагмент:
источник
Вы можете управлять видимостью клавиатуры, переопределив два метода в своей деятельности:
onKeyUp()
иonKeyDown()
дополнительную информацию по этой ссылке: https://developer.android.com/training/keyboard-input/commandsисточник
К сожалению, у меня нет достаточно высокой репутации, чтобы комментировать ответ Яапа ван Хенгстума. Но я прочитал несколько комментариев людей, имеющих проблему, которая
contentViewTop
всегда0
и такonShowKeyboard(...)
всегда называется.У меня была та же проблема, и я понял проблему, которая у меня была. Я использовал
AppCompatActivity
вместо «нормальный»Activity
. В этом случаеWindow.ID_ANDROID_CONTENT
относится к,ContentFrameLayout
а не кFrameLayout
с правильным верхним значением. В моем случае было нормально использовать «обычный»Activity
, если вам нужно использовать другой тип активности (я только что проверилAppCompatActivity
, может быть, это также проблема с другими типами активности, такими какFragmentActivity
), вы должны получить доступ кFrameLayout
, который предокContentFrameLayout
.источник
когда клавиатура покажет
верно, иначе спрятать
источник
Я немного изменил принятый ответ Jaap. Но в моем случае есть несколько предположений, таких как,
android:windowSoftInputMode=adjustResize
и клавиатура не появляется в начале, когда приложение запускается. А также, я предполагаю, что экран в отношении соответствует росту родителя.contentHeight > 0
эта проверка позволяет мне узнать, скрыт ли соответствующий экран или показан ли для применения прослушивания событий клавиатуры для этого конкретного экрана. Также я передаю вид компоновки соответствующего экрана в методеattachKeyboardListeners(<your layout view here>)
моей основной деятельностиonCreate()
. Каждый раз, когда высота соответствующего экрана изменяется, я сохраняю его вprevContentHeight
переменную, чтобы позже проверить, отображается ли клавиатура или скрыта.Для меня до сих пор это работало довольно хорошо. Я надеюсь, что это работает и для других.
источник
Ответ Яапа ван Хенгстума работает для меня, но нет необходимости устанавливать "android: windowSoftInputMode", как он только что сказал!
Я сделал его меньше (теперь он просто определяет, что я хочу, на самом деле событие при отображении и скрытии клавиатуры):
и просто не забудьте добавить это
источник
Это будет работать без необходимости изменения вашей активности
android:windowSoftInputMode
Шаг 1: расширить класс EditText и переопределить эти два:
Шаг 2: создайте эти два в своей деятельности:
*** помните, чтобы сделать
clearFocus
работу, вы должны сделать родительский или первый дочерний элемент в родительской иерархии фокусируемым.источник
Это не работает, как хотелось бы ...
... видели, как многие используют вычисления размера, чтобы проверить ...
Я хотел определить, было ли это открыто или нет, и я нашел
isAcceptingText()
так что это действительно не отвечает на вопрос, так как не касается открытия или закрытия, а скорее как открытый или закрытый, так что это связанный код, который может помочь другим в различных сценариях ...
в деятельности
фрагментом
источник
проверьте с помощью приведенного ниже кода:
XML-код:
КОД JAVA:
источник