Mam kilka elementów w RelativeView z ustawionym atrybutem align bottom, gdy pojawia się klawiatura programowa, elementy są ukrywane przez klawiaturę programową.
Chciałbym, aby przesuwały się w górę, aby jeśli jest wystarczająco dużo miejsca na ekranie, były wyświetlane nad klawiaturą lub aby sekcja nad klawiaturą była przewijana, aby użytkownik nadal mógł zobaczyć elementy.
Jakieś pomysły, jak do tego podejść?
Odpowiedzi:
Tak, zapoznaj się z tym artykułem na stronie deweloperów Androida, który opisuje, jak framework radzi sobie z pojawianiem się klawiatury.
android:windowSoftInputMode
Atrybut może być używany do określenia tego, co dzieje się na zasadzie per-aktywności: czy układ jest zmieniany, czy to przewija itd.źródło
Możesz również użyć tego kodu w
onCreate()
metodzie:źródło
Dodaj plik AndroidManifest.xml do swojej aktywności:
źródło
Wprowadź zmiany w aktywności pliku manifestu, na przykład
LUB
Wprowadź zmiany w swojej
onCreate()
metodzie w klasie aktywności, takiej jakźródło
Podobny problem, z którym miałem do czynienia w przypadku mojego układu, który zawiera widok przewijania w środku. Za każdym razem, gdy próbuję zaznaczyć tekst w EditText, pasek akcji Kopiuj / Wytnij / Wklej zostaje przesunięty w górę z poniższym kodem, ponieważ nie zmienia rozmiaru układu
Zmieniając go tak, jak poniżej
1) AndroidManifest.xml
2) plik style.xml, w stylu działania
Zadziałało.!!!!!!!!!!!!
źródło
W AndroidManifest.xml nie zapomnij ustawić:
a dla RelativeLayout w ScrollView ustaw:
będzie dobrze
źródło
dla Activity w jego metodzie oncreate wstaw poniżej wiersza
i fragmentów w metodzie onCreate
źródło
Aby przewinąć ekran w górę, należy wykonać 3 kroki.
PS Nie zapomnij dodać android: layout_gravity = "center" w nadrzędnym układzie względnym.
źródło
Wypróbowałem metodę Diego Ramíreza, to działa. W AndroidManifest:
W activity_main.xml:
źródło
Dodaj NestedScrollView wokół układu, który chcesz przewijać, to będzie idealnie działać
źródło
Znalazłem rozwiązanie moich problemów, które jest prawie takie samo jak twoje.
Przede wszystkim mam tylko LinearLayout z 2 elementami, ImageView i LinearLayout, który zawiera 2 EditText i jeden Button, więc musiałem je rozdzielić na pełnym ekranie bez klawiatury, a kiedy pojawi się klawiatura, powinny wyglądać bliżej.
Dodałem więc widok między nimi z atrybutem wysokości w 0dp i wadze 1, dzięki czemu moje widoki są oddzielone od siebie. a kiedy klawiatura się pojawia, ponieważ nie ma stałej wysokości, po prostu zmienia rozmiar i zachowuje proporcje.
Voila! Zmiana rozmiaru układu i odległość między widokami są takie same, gdy klawiatura jest obecna lub nie.
źródło
ConstraintLayout
litery i przypinając górną sekcję do góry i dolną do dołu. Gdy klawiatura się otworzy, naturalnie zmieni rozmiar, ściskając spację pośrodku (jeśli używaszadjustResize
)źródło
Oto pełny kod manifestu
źródło
jeśli jesteś w fragmentach to musisz dodać poniższy kod do swojego onCreate na swojej aktywności rozwiązuje problem dla mnie
źródło
W pliku manifestu dodaj poniższą linię. To będzie działać
źródło
Właśnie dodałem następujący wiersz do układu najwyższego poziomu i wszystko działało:
źródło
W porządku, jest bardzo późno, ale odkryłem, że jeśli dodasz widok listy pod tekstem edycji, klawiatura przeniesie wszystkie układy pod tym edittext bez przenoszenia widoku ListView
To jedyne rozwiązanie, które u mnie zadziałało.
źródło
Żadna rada nie rozwiązuje mojego problemu. Regulacja panoramy jest prawie tak samo jak praca Dopasuj zmianę rozmiaru . Jeśli ustawię opcję Dostosuj, tylko układ nie przesunie się w górę, ale ukryje mój tekst na dole, który obecnie piszę. Po 24 godzinach ciągłych poszukiwań znalazłem to źródło i rozwiązało mój problem.
źródło
Może być późno, ale chcę dodać kilka rzeczy. W Android Studio w wersji 4.0.1 i Gradle w wersji 6.1.1
windowSoftInputMode
nie będzie działać zgodnie z oczekiwaniami, jeśli dodasz następujące flagi w swoim działaniu:Po zmarnowaniu dużo czasu znalazłem ten hack. Aby
adjustResize
lubAdjustPan
lub atrybutwindowSoftInputMode
do pracy prawidłowo, trzeba usunąć to od Twojej aktywności.źródło