Klawiatura programowa systemu Android nigdy nie pojawia się w emulatorze

86

Jestem nowy w Androidzie. Spędziłem już dwie godziny na szukaniu. Cokolwiek spróbuję, klawiatura programowa nigdy nie jest wyświetlana dla mojego EditText. Tworzę to po prostu:

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

Próbowałem:

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

i:

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);

         }
     });

próbowałem też:

getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);

próbowałem umieścić ten wiersz w AndroidManifest.xmlpliku:

 android:windowSoftInputMode="stateVisible|adjustResize"

ale wszystko na próżno. Po prostu nigdy się nie pojawia. Czego mi brakuje?

Andrey Chernukha
źródło
czy klawiatura otwiera się w innej aplikacji?
Niranj Patel,
spróbuj tego zastąpić imm.showSoftInput (editText, InputMethodManager.SHOW_IMPLICIT); to do imm.toggleSoftInput (InputMethodManager.SHOW_FORCED, 0);
Aravin,
@CapDroid nie, niestety. Próbowałem w innej aplikacji, ale nadal bez powodzenia
Andrey Chernukha
@Aravinth nadal nie działa
Andrey Chernukha
Używasz emulatora lub urządzenia.
Aravin

Odpowiedzi:

211

Musisz upewnić się, że twój emulator nie jest skonfigurowany do używania klawiatury sprzętowej . Można to zrobić, wybierając Editwybrany emulator w AVD. Następnie odznacz ten Hardware keyboard presentustawienia.

Możesz także spróbować użyć innego emulatora, takiego jak Genymotion . Obsługuje pełne przyspieszenie sprzętowe (wielordzeniowy procesor, a także GPU) i działa znacznie szybciej niż którykolwiek z obrazów emulatora Androida. Jeśli używasz Genymotion, będziesz musiał wyłączyć klawiaturę sprzętową w systemie Android (szczegóły poniżej).

Aby wyłączyć klawiaturę sprzętową w Genymotion:
Idź do Settings-> Language & inputi otwórz Defaultelement pod Keyboard & Input Methods. Istnieje Hardwareustawienie, które można włączać / wyłączać. Gdy jest włączona , używasz klawiatury fizycznej, a gdy jest wyłączona, standardowa klawiatura programowa powinna wyskakiwać, gdy tylko pole tekstowe zostanie wyróżnione.

Zrzuty ekranu dla ustawień Genymotion: Pozycja domyślna

wprowadź opis obrazu tutaj

free3dom
źródło
4
Wreszcie! Dziękuję Ci bardzo. Chciałbym móc dwukrotnie zagłosować za twoją odpowiedzią. Jeśli chodzi o Genymotion - spędziłem jeden dzień próbując go skonfigurować, ale to nie zadziałało. Nie mogłem nawet napisać do ich wsparcia
Andrey Chernukha
Cieszę się, że mogę pomóc :) Jeśli chodzi o Genymotion, są one stale ulepszane, ale nadal jest to wersja zapoznawcza / beta. Jednak odkąd zacząłem go używać, nie miałem żadnego problemu. Możliwe, że zacząłem od tego, kiedy już rozwiązali większość problemów - albo po prostu mam szczęście :). To powiedziawszy, emulator (y) Androida dają więcej odmian, więc nadal używam ich do testowania kompatybilności.
free3dom
To świetnie, teraz mam wirtualną klawiaturę! Ale mam EditText z androidem: inputType = "numberDecimal">, a virtualkeyboard nie pisze liczb (pisze je tylko wtedy, gdy napiszę przed nimi list). Sprawdzanie pisowni jest już wyłączone ...
Michele
Zajrzyj tutaj, aby znaleźć możliwe rozwiązania.
free3dom
@ free3dom ~ "otwórz domyślną pozycję w obszarze Klawiatura i metody wprowadzania" Co to jest? Nie widzę tego przedmiotu.
IgorGanapolsky
73

W wersji 2.1.1 - kliknij na ustawienia swojego urządzenia wirtualnego - następnie zaznacz pole wyboru „używaj wirtualnej klawiatury do pisania”. wprowadź opis obrazu tutaj

wprowadź opis obrazu tutaj

Sharif
źródło
2

W AS 1.1.0 są dwa miejsca do odznaczenia klawiatury sprzętowej. Ten nie wystarczy:

wprowadź opis obrazu tutaj

Należy to zrobić (kliknij Tools | Android | AVD Manager; następnie utwórz nowy lub edytuj stary AVD, a następnie kliknij Show Advanced Settings; przewiń w dół i wyczyść Enable keyboard input):

wprowadź opis obrazu tutaj

DSlomer64
źródło
Spędziłem trochę czasu na znalezieniu tego rozwiązania, ponieważ wskaźnik przewijania zwykle znika i pojawia się dopiero po rozpoczęciu przewijania. Jeśli widok można przewijać, polecam wizualne wskazanie tej możliwości.
GregM
Nie działa dla mnie w Android Studio. Odznaczam opcję „Włącz wprowadzanie z klawiatury”, ale emulator nadal NIE pokazuje klawiatury programowej.
Evgenii
Wspomniałeś tylko o jednym „odznaczeniu”. Drugi to „Ma klawiaturę sprzętową”, jak pokazano - i prawdopodobnie też ją wyczyściłeś. Może wypróbuj inne urządzenie wirtualne? Uważam, że emulator AS jest dość trudny do tolerowania. Powolne ładowanie, takie dziwactwa ... Powodzenia.
DSlomer64
2

Metoda włączania klawiatury ekranowej dla emulatorów Android Studio 2+ zależy od poziomu API emulatora. Przetestowałem różne metody, zaczynając od API 15 i zapisałem poniższe kroki.

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

Poniższe kroki włączą ekranową klawiaturę programową, ale wyłączą możliwość wprowadzania tekstu i interakcji z AVD za pomocą sprzętowej klawiatury komputera.

  1. W Android Virtual Device Manager (AVD) kliknij czynność edycji dla urządzenia, z którym chcesz pracować
  2. Kliknij Pokaż ustawienia zaawansowane i przewiń w prawo do samego dołu strony, do sekcji „Klawiatura”
  3. Odznacz opcję „Włącz wprowadzanie z klawiatury”

[B] API 22

Klawiatura programowa jest wyświetlana niezależnie od tego, co robisz z ustawieniami klawiatury sprzętowej. Jeśli chcesz włączyć obsługę klawiatury sprzętowej obok klawiatury programowej,

  1. W AVD kliknij czynność edycji dla urządzenia, z którym chcesz pracować
  2. Kliknij Pokaż ustawienia zaawansowane i przewiń w prawo do samego dołu strony, do sekcji „Klawiatura”
  3. Zaznacz opcję „Włącz wprowadzanie z klawiatury”

[C] API 23

Jeśli chcesz korzystać ze sprzętu i klawiatury programowej, ...

  1. Wykonaj [B] kroki od 1 do 3
  2. Na urządzeniu wirtualnym uruchom Ustawienia, a następnie wybierz Język i wprowadzanie / Bieżąca klawiatura
  3. Włącz sprzęt - Pokaż metodę wprowadzania

Jeśli nie potrzebujesz klawiatury sprzętowej, w ustawieniach zaawansowanych AVD usuń zaznaczenie opcji „Włącz wprowadzanie z klawiatury”. Nie musisz zmieniać żadnych ustawień na urządzeniu wirtualnym.

[D] API 24 i 25

  1. Wykonaj [B] kroki od 1 do 3 powyżej, zaznaczając lub odznaczając opcję „Włącz wprowadzanie z klawiatury” w zależności od tego, czy chcesz włączyć klawiaturę sprzętową.
  2. Na urządzeniu wirtualnym uruchom Ustawienia, a następnie wybierz Język i wprowadzanie / Klawiatura fizyczna
  3. Włącz „Pokaż klawiaturę wirtualną”

Jeśli w AVD wybrano opcję Włącz wprowadzanie z klawiatury, będziesz mógł teraz używać zarówno twardych, jak i miękkich wejść klawiatury. Jeśli odznaczysz tę opcję w AVD, klawiatura programowa będzie wyświetlana niezależnie.

[E] API 26

Dokładnie to samo, co [D] API 24 i 25, z wyjątkiem tego, że musisz przejść przez dodatkowy poziom menu „System” w ustawieniach urządzenia, zanim przejdziesz do Język i wprowadzanie danych / Klawiatura fizyczna

Will P
źródło
1

Być może Twój emulator nie obsługuje klawiatury programowej.

Dodaj właściwość sprzętu Obsługa klawiatury i ustaw ją na wartość true dla swojego emulatora.

Jeśli to już prawda, zaznacz tę odpowiedź.

Niranj Patel
źródło
1

Pokazywać:

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);

I do ukrycia:

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

Po prostu spróbuj tego ....

FarhaSameer786
źródło
to niestety nie pomogło
Andrey Chernukha
InputMethodManager imm = (InputMethodManager) getSystemService (Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput (InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); ... spróbuj tego
FarhaSameer786
@Andrey Chernukha - myślę, że twój emulator nie obsługuje klawiatury programowej lub sprzętu emulatora nie działa poprawnie .....
FarhaSameer786