2013-11-14 21 views
8

Zajmuję się tworzeniem aplikacji opartej na PhoneGap i szukałem dużo informacji o tym, jak zmienić moją wysokość, gdy pojawi się wirtualna klawiatura, lub przynajmniej uzyskać wysokość Wirtualna klawiatura. Znalazłem wiele stanowisk (w tym stackoverflow), który mówi, żeAndroid + PhoneGap: android: windowSoftInputMode nie działa

android:windowSoftInputMode="adjustResize" 

musi być ustawiony w manifeście i zrobiłem to. Zauważyłem również, że dla PhoneGap config.xml istnieje ustawienie

i wkleiłem to również. Próbowałem również połączonej wartości "stateVisible | adjustResize" (nie tylko "adjustResize") dla obu parametrów, ale wydaje mi się, że oba nie mają ŻADNEGO EFEKTU. Nie wiem, może robię coś nie tak, ale możesz sprawdzić zrzuty ekranu z emulatora (Android 4.0.3, ale wypróbowałem także 4.1.2 i 4.2.2):
http://screencast.com/t/Mm0mw8c693 - klawiatura widoczna
http://screencast.com/t/lZ2DomqeRR - klawiatura ukryta
Na zrzucie ekranu umyślnie przechwyciłem moje ustawienia manifestu i config.xml, więc możesz zobaczyć, że rzeczywiście tam są.
Nagrałem nawet krótkie wideo - http://screencast.com/t/xI9PMcMJxxx

Jak widać, nie ma żadnego rozmiaru ekranu podczas wyświetlania/ukrywania klawiatury. Sprawdziłem również window.innerHeight przy użyciu console.log() i pozostaje taki sam dla klawiatury widocznej i ukrytej.

Proszę, daj mi radę.

+0

Czy rozwiązałeś ten problem? Jeśli tak, proszę zamieścić swoje rozwiązanie i oznaczyć je jako poprawną odpowiedź! –

Odpowiedz

6

windowSoftInputMode="adjustResize" nie działa, jeśli aplikacja znajduje się w trybie pełnoekranowym (ustawienie fullscreen do true w config.xml). Problem z Androidem to nie Cordova. the issue CB-4404 został zgłoszony w Cordova bug tracker od miesięcy, ale ostatnio okazuje się, że it is working as intended na tropiku Androida.

Rozwiązałem problem, ustawiając fullscreen na false, ponieważ nie było problemu z moją aplikacją, aby nie wyświetlać się na pełnym ekranie.

1

Znalazłem, że potrzebuję 3 rzeczy, aby rozwiązać ten problem, i zapobiegać ukrywaniu się paska akcji przed przewinięciem widoku podczas podnoszenia klawiatury.

1) AndroidManifest.xml w działalności, że potrzebne linię:

android:windowSoftInputMode="adjustResize" 

Oryginalny problemem jest to, że adjustPan był obecny w przewodzie powyżej. Na początku tylko powyższa zmiana rozwiązała problem.

Projekt, w którym jestem, wykorzystuje fragmenty. W metodzie onCreateView, inny fragment miał linię:

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); 

Linia ta, niestety, overrode parametr adjustResize w manifeście aplikacji, a potem był wyświetlany ten drugi fragment, fragment, że naprawiłem wybuchła ponownie. Aby naprawić nową przerwę, zrobiłem 2 dodatkowe rzeczy.

2) Usunięto linię SOFT_INPUT_ADJUST_PAN z metody onCreateView tego innego fragmentu, ponieważ i tak ta linia nie była potrzebna.

3) W sposobie onCreateView fragmentu, z którymi jestem zainteresowany głównie dodałem linię:

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); 

Faktycznie, wykonując jedną z pozycji 2 lub 3 rozwiązałoby problem. Zrobiłem obie, aby być dokładnym.

0

możesz ustawić tę właściwość w android.manifest jawnie na "adjustNothing", wtedy nie musisz ustawiać trybu "fullscreen" na false. ale musisz zaktualizować go za każdym razem, gdy aktualizujesz/dodajesz platformę Android.

Powiązane problemy