Я искал и искал ответ на этот вопрос, и все, что выглядело как ответ, не сработало, поэтому я думаю, что просто спрошу.
Я добавьте пару блоков EditText
в ListView
, который является основой для ListActivity
. Когда я устанавливаю windowSoftInputMode
на adjustPan
и нажимаю EditText
, он работает, пока вы не нажмете на него еще раз, а затем клавиатура закроет его. Когда я использую adjustResize
, он работает, за исключением случаев, когда клавиатура появляется, EditText
теряет фокус, и мне приходится снова нажимать на него, чтобы печатать.
Я пытался понять, как отловить onResize
, но похоже, что это связано с представлением, а не с активностью, и я не совсем уверен, как это отслеживать. Я также пробовал всевозможные настраиваемые параметры в полях EditText
и самом ListView
(как предлагалось в других сообщениях, которые я читал), которые, похоже, тоже не помогают.
Все, что вам действительно нужно сделать, это применить это к вашему ListView:
XML:
android:descendantFocusability="afterDescendants"
Java:
listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
Пробовали ли вы после того, как вы сделали adjustResize
, чтобы убедиться, что вы сбросили фокусировку на EditText
, выполнив что-то вроде EditText.requestFocus();
, чтобы у него снова был фокус, и пользователю не нужно было снова нажимать на него. Вы можете использовать EditText.isFocused()
, чтобы увидеть, сфокусировано ли оно (true) или нет (false) в операторе журнала отладки или что-то еще.
Возможно, вам также потребуется установить поле на focusable
, используя SetFocusable()
, но будьте осторожны, потому что это может отвлечь внимание от самого ListView
и лишить вас возможности прокручивать или выбирать вещи позже, так что вам придется поэкспериментировать с настройкой фокуса и фокусировки.
В этом мне помогло сочетание следующих моментов (особенно номер 3):
1) Добавьте следующее к связанному действию в файле манифеста, это необходимо для изменения размера ListView, чтобы заполнить только область над softKeyboard:
android:windowSoftInputMode="adjustResize"
2) С помощью приведенного ниже элемента ListView ТОЛЬКО получит фокус, только если ни один из его потомков не хочет этого. Потомки (EditText) должны получить и сохранить фокус.
<ListView
...
android:descendantFocusability="afterDescendants"/>
3) Автоматическое отображение / скрытие панели правописания прямо над клавиатурой продолжает вызывать обновление ListView. Я отключил предложения для любого EditText в моем ListView.
<EditText
...
android:inputType="textNoSuggestions|textVisiblePassword" />
вид переработчика работает лучше всего, и нет необходимости возиться с какими-либо другими объектами.