Программная клавиатура Android никогда не отображается в эмуляторе

86

Я новичок в Android. Уже часа два на поиски. Что бы я ни попробовал, программная клавиатура никогда не отображается для моего EditText. Создаю просто:

EditText editText = (EditText)findViewById(R.id.editText);

Я старался:

 editText.requestFocus();//i tried without this line too
 InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
 imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);

а также:

editText.setOnFocusChangeListener(new OnFocusChangeListener() {

         @Override
         public void onFocusChange(View v, boolean hasFocus) 
         {    

                     InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                     imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);

         }
     });

я также пробовал:

getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);

Я попытался поместить эту строку в AndroidManifest.xmlфайл:

 android:windowSoftInputMode="stateVisible|adjustResize"

но все напрасно. Этого просто не видно. Что мне не хватает?

Андрей Чернуха
источник
открывается ли клавиатура в любом другом приложении?
Niranj Patel
попробуйте заменить imm.showSoftInput (editText, InputMethodManager.SHOW_IMPLICIT); это в imm.toggleSoftInput (InputMethodManager.SHOW_FORCED, 0);
Аравин
@CapDroid нет, к сожалению. я пробовал в другом приложении, но все равно не повезло
Андрей Чернуха
@Aravinth по-прежнему не работает
Андрей Чернуха
Вы используете эмулятор или устройство.
Аравин

Ответы:

211

Вам необходимо убедиться, что ваш эмулятор не настроен на использование аппаратной клавиатуры . Это можно сделать, выбрав Editэмулятор в AVD. Затем снимите флажок с Hardware keyboard presentпараметра.

Вы также можете попробовать использовать другой эмулятор, например Genymotion . Он поддерживает полное аппаратное ускорение (многоядерный процессор и графический процессор) и работает намного быстрее, чем любой из образов эмулятора Android. Если вы используете Genymotion, вам необходимо отключить аппаратную клавиатуру в Android (подробности см. Ниже).

Чтобы отключить аппаратную клавиатуру в Genymotion:
перейдите в Settings-> Language & inputи откройте Defaultэлемент под Keyboard & Input Methods. Есть Hardwareнастройка, которую можно включать / выключать. Когда он включен, вы используете свою физическую клавиатуру, а когда она выключена, стандартная программная клавиатура должна всплывать всякий раз, когда текстовое поле получает фокус.

Скриншоты для настроек Genymotion: Элемент по умолчанию

введите описание изображения здесь

free3dom
источник
4
В заключение! Большое спасибо. Хотел бы я дважды проголосовать за ваш ответ. Что касается Genymotion - я однажды потратил день, пытаясь настроить его, но это не сработало. Я даже не смог написать в их поддержку
Андрей Чернуха
Рад помочь :) Что касается Genymotion, они постоянно улучшаются, но это все еще превью / бета. Однако с тех пор, как я начал его использовать, у меня не было ни одной проблемы. Может быть, я просто начал с этого, когда они разобрались с большинством проблем - или мне просто повезло :). Тем не менее, эмуляторы Android предоставляют больше вариантов, поэтому я все еще использую их для тестирования совместимости.
free3dom
Отлично, теперь у меня есть виртуальная клавиатура! Но у меня есть EditText с android: inputType = "numberDecimal">, а виртуальная клавиатура не записывает числа (она записывает их, только если я напишу перед ними букву). Проверка орфографии уже отключена ...
Мишель
Посмотрите здесь возможные решения.
free3dom
@ free3dom ~ "откройте элемент по умолчанию в разделе" Клавиатура и методы ввода "Что это? Я не вижу этого предмета.
Игорь Ганапольский
73

В версии 2.1.1 - щелкните настройки своего виртуального устройства - затем установите флажок «использовать виртуальную клавиатуру для набора текста». введите описание изображения здесь

введите описание изображения здесь

Шариф
источник
2

В AS 1.1.0 есть два места для отмены выбора аппаратной клавиатуры. Этого недостаточно:

введите описание изображения здесь

Это необходимо сделать (щелкните Tools | Android | AVD Manager; затем создайте новый или отредактируйте старый AVD, а затем щелкните Show Advanced Settings; прокрутите вниз и очистите Enable keyboard input):

введите описание изображения здесь

DSlomer64
источник
Я потратил время на поиск этого решения, потому что индикатор прокрутки обычно отсутствует и появляется только после того, как вы начинаете прокрутку. Я бы порекомендовал, если представление можно прокручивать, чтобы иметь какое-то указание на эту возможность визуально.
GregM
У меня не работает в Android Studio. Я снимаю флажок «Включить ввод с клавиатуры», но эмулятор по-прежнему НЕ показывает программную клавиатуру.
Евгений
Вы упомянули только одно «снятие отметки». Другой - «Имеет аппаратную клавиатуру», как показано, и вы, вероятно, уже очистили его. Может попробовать другое виртуальное устройство? Я обнаружил, что эмулятор AS довольно тяжело переносить. Медленно загружается, вот такие причуды .... Удачи.
DSlomer64
2

Способ включения экранной виртуальной клавиатуры для эмуляторов Android Studio 2+ зависит от уровня API эмулятора. Я протестировал различные методы, начиная с API 15, и записал следующие шаги.

[A] API 15, 17, 19 и 21.

Следующие шаги позволят включить экранную виртуальную клавиатуру, но отключат возможность ввода текста и взаимодействия с AVD с помощью аппаратной клавиатуры компьютера.

  1. В Android Virtual Device Manager (AVD) щелкните действие редактирования для устройства, с которым вы хотите работать.
  2. Нажмите «Показать дополнительные настройки» и прокрутите страницу вниз до раздела «Клавиатура».
  3. Снимите флажок "Включить ввод с клавиатуры".

[B] API 22

Программная клавиатура отображается независимо от того, что вы делаете с настройками аппаратной клавиатуры. Если вы хотите включить поддержку аппаратной клавиатуры вместе с программной клавиатурой, тогда,

  1. В AVD щелкните действие редактирования для устройства, с которым вы хотите работать.
  2. Нажмите «Показать дополнительные настройки» и прокрутите страницу вниз до раздела «Клавиатура».
  3. Установите флажок "Включить ввод с клавиатуры".

[C] API 23

Если вы хотите использовать аппаратную часть и программную клавиатуру, тогда ...

  1. Выполните [B] шаги с 1 по 3.
  2. На виртуальном устройстве запустите настройки, затем выберите Язык и ввод / Текущая клавиатура.
  3. Включить оборудование - Показать метод ввода

Если вам не нужна аппаратная клавиатура, в расширенных настройках AVD снимите флажок «Включить ввод с клавиатуры». Вам не нужно менять какие-либо настройки на виртуальном устройстве.

[D] API 24 и 25

  1. Выполните шаги с 1 по 3 [B] выше, установив или сняв флажок «Включить ввод с клавиатуры» в зависимости от того, хотите ли вы включить аппаратную клавиатуру.
  2. На виртуальном устройстве запустите настройки, затем выберите Язык и ввод / Физическая клавиатура.
  3. Включите "Показать виртуальную клавиатуру"

Если в AVD была выбрана опция «Включить ввод с клавиатуры», то теперь вы сможете использовать как аппаратный, так и программный ввод с клавиатуры. Если вы сняли флажок в AVD, программная клавиатура будет отображаться независимо.

[E] API 26

Точно так же, как [D] API 24 и 25, за исключением того, что вам нужно перейти через дополнительный уровень меню «Система» в настройках устройства, прежде чем вы перейдете к языку и вводу / физической клавиатуре.

Будет P
источник
1

Возможно, ваш эмулятор не поддерживает программную клавиатуру.

Добавьте аппаратное свойство Keyboard support и установите для него значение true для вашего эмулятора.

Если это уже правда, проверьте этот ответ.

Нирандж Патель
источник
1

Показывать:

EditText editText = (EditText) findViewById(R.id.myEdit);
InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
// only will trigger it if no physical keyboard is open
mgr.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);

И скрыть:

InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(editText.getWindowToken(), 0);

Просто попробуйте это ....

ФархаСамир786
источник
не помогло, к сожалению,
Андрей Чернуха
InputMethodManager imm = (InputMethodManager) getSystemService (Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput (InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); ... попробуйте это
FarhaSameer786
@ Андрей Чернуха - я думаю, что ваш эмулятор не поддерживает программную клавиатуру или оборудование эмулятора не работает должным образом .....
FarhaSameer786