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.xml
pliku:
android:windowSoftInputMode="stateVisible|adjustResize"
ale wszystko na próżno. Po prostu nigdy się nie pojawia. Czego mi brakuje?
Odpowiedzi:
Musisz upewnić się, że twój emulator nie jest skonfigurowany do używania klawiatury sprzętowej . Można to zrobić, wybierając
Edit
wybrany emulator w AVD. Następnie odznacz tenHardware keyboard present
ustawienia.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 & input
i otwórzDefault
element podKeyboard & Input Methods
. IstniejeHardware
ustawienie, 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:
źródło
W wersji 2.1.1 - kliknij na ustawienia swojego urządzenia wirtualnego - następnie zaznacz pole wyboru „używaj wirtualnej klawiatury do pisania”.
źródło
W AS 1.1.0 są dwa miejsca do odznaczenia klawiatury sprzętowej. Ten nie wystarczy:
Należy to zrobić (kliknij
Tools | Android | AVD Manager
; następnie utwórz nowy lub edytuj stary AVD, a następnie kliknijShow Advanced Settings
; przewiń w dół i wyczyśćEnable keyboard input
):źródło
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.
[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,
[C] API 23
Jeśli chcesz korzystać ze sprzętu i klawiatury programowej, ...
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
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
źródło
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ź.
źródło
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 ....
źródło