Я хотел бы изменить расположение в зависимости от того, отображается виртуальная клавиатура или нет. Я искал API и различные блоги, но не могу найти ничего полезного.
Является ли это возможным?
Спасибо!
android
events
android-softkeyboard
Сандер Верслуйс
источник
источник
Ответы:
Заметка
Вы должны справиться с изменениями конфигурации самостоятельно.
http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange
Образец:
Затем просто измените видимость некоторых видов, обновите поле и измените файл макета.
источник
newConfig.keyboardHidden == Configuration.KEYBOARDHIDDEN_NO
~ КрисЭто может быть не самым эффективным решением. Но это работало для меня каждый раз ... Я вызываю эту функцию везде, где мне нужно слушать softKeyboard.
Примечание: этот подход вызовет проблемы, если пользователь использует плавающую клавиатуру.
источник
android:windowSoftInputMode="adjustPan"
илиadjustResize
с полноэкранным окном, так как макет никогда не изменяется.Если вы хотите обработать отображение / скрытие окна виртуальной клавиатуры IMM из вашей деятельности, вам нужно создать подкласс своего макета и переопределить метод onMesure (чтобы вы могли определить измеренную ширину и измеренную высоту вашего макета). После этого установите подклассный макет в качестве основного вида для вашей деятельности с помощью setContentView (). Теперь вы сможете обрабатывать события отображения / скрытия окна IMM. Если это звучит сложно, это не так. Вот код:
main.xml
Теперь внутри вашей Activity объявите подкласс для вашего макета (main.xml)
Из кода видно, что мы раздуваем компоновку для нашей Деятельности в конструкторе подкласса
А теперь просто настройте представление содержимого подклассного макета для нашей Деятельности.
источник
android:windowSoftInputMode="adjustPan"
илиadjustResize
с полноэкранным окном, поскольку макет никогда не изменяетсяЯ сделал это так:
Добавить
OnKeyboardVisibilityListener
интерфейс.HomeActivity.java :
Надеюсь, это поможет вам.
источник
На основе кода от Nebojsa Tomcic я разработал следующий RelativeLayout-Subclass:
Это работает довольно хорошо ... Отметьте, что это решение будет просто работать, когда режим мягкого ввода вашей активности установлен в "WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE"
источник
android:windowSoftInputMode="adjustPan"
илиadjustResize
с полноэкранным окном, так как макет никогда не изменяется.Как и в ответе @ amalBit, зарегистрируйте слушателя для глобального макета и вычислите разницу видимого дна dectorView и его предполагаемого дна. Если разница больше некоторого значения (предполагаемая высота IME), мы думаем, что IME работает:
порог высоты 100 - это предполагаемая минимальная высота IME.
Это работает как для AdjustPan, так и AdjustResize.
источник
Решение Небойши почти сработало для меня. Когда я щелкнул внутри многострочного EditText, он знал, что клавиатура была отображена, но когда я начал печатать внутри EditText, actualHeight и предлагаемый Height были одинаковыми, поэтому он не знал, что клавиатура все еще отображается. Я сделал небольшую модификацию, чтобы сохранить максимальную высоту, и она отлично работает. Вот пересмотренный подкласс:
источник
Не уверен, если кто-нибудь опубликовать это Нашел это решение простым в использовании! , Класс SoftKeyboard находится на gist.github.com . Но в то время как клавиатура возвращает / скрывает обратный вызов события, нам нужен обработчик для правильного выполнения действий в пользовательском интерфейсе:
источник
Я решаю это путем переопределения onKeyPreIme (int keyCode, событие KeyEvent) в моем пользовательском EditText.
источник
У меня есть что-то вроде этого. Хотя , кажется, не быть способ определить , когда экранная клавиатура показала или скрытый, вы можете на самом деле определить , когда это о , чтобы показать или скрыть, установив
OnFocusChangeListener
наEditText
этом вы слушаете.ПРИМЕЧАНИЕ. Одна вещь, о которой следует помнить с этим взломом, заключается в том, что этот обратный вызов запускается сразу же, когда
EditText
усиливается или теряет фокус. Это на самом деле срабатывает прямо перед тем, как программная клавиатура показывает или скрывается. Лучший способ сделать что-то после того, как клавиатура показывает или скрывается, это использовать aHandler
и задерживать что-то ~ 400 мс, например так:источник
OnFocusChangeListener
только сообщает,EditText
имеет ли фокус после изменения состояния. НоIME
может быть скрыто, когдаEditText
есть фокус, как обнаружить этот случай?Сандер, я думаю, ты пытаешься показать вид, заблокированный программной клавиатурой. Попробуйте это http://android-developers.blogspot.com/2009/04/updating-applications-for-on-screen.html .
источник
Я решил проблему с однострочным кодированием текста.
источник
Вы также можете проверить наличие дочернего нижнего отступа первого DecorView. При отображении клавиатуры будет установлено ненулевое значение.
источник
Скрыть | Показать события для клавиатуры можно прослушать простым взломом в OnGlobalLayoutListener:
Здесь ActivityRootView - это корневой вид вашей активности.
источник
с помощью viewTreeObserver легко получить событие клавиатуры.
** layout_parent - это ваш взгляд как
edit_text.parent
источник
Ответ Небойши Томчича мне не помог. Я
RelativeLayout
сTextView
иAutoCompleteTextView
внутри него. Мне нужно прокрутитьTextView
вниз, когда клавиатура отображается и когда она скрыта. Чтобы добиться этого, я переопределилonLayout
метод, и он прекрасно работает для меня.источник