Klawiatura programowa Android obejmuje pole EditText

Odpowiedzi:

163

Czy pytasz, jak kontrolować to, co jest widoczne po otwarciu miękkiej klawiatury? Możesz pobawić się z windowSoftInputMode . Więcej dyskusji znajdziesz w dokumentacji dla programistów .

Cheryl Simon
źródło
2
To działa dobrze, ale upewnij się, że masz <item name = "android: windowIsFloating"> true </item> w swoim stylu okna dialogowego, na wypadek gdybyś używał niestandardowego stylu okna dialogowego.
Dmitry Chistyakov
Wygląda na to, że to nie działa w trybie poziomym (Nexus 7), element edytowalny pozostaje ukryty pod klawiaturą. Próbowałem różnych kombinacji windowSoftInputMode. Wygląda na to, że nie mogę ustawić windowIsFloating, ponieważ ActionBar go nie obsługuje. Czy może to mieć również coś wspólnego z faktem, że mój tekst edycji znajduje się wewnątrz elementu widoku listy?
Sampo Sarrala - codidact.org
To nie zadziała po dodaniu <item name = "android: windowTranslucentStatus"> true </item> do moich. Ktoś to naprawi?
Max
1
@Max Dodaj android:fitsSystemWindows="true"do widoku głównego, aby rozwiązać ten problem.
David Passmore
1
Co powiesz na wyciągnięcie pełnego układu nad klawiaturą, gdy dostępna jest miękka klawiatura, bez względu na to, co jak WhatsApp ...
Karue Benson Karue
162

Miałem te same problemy. Wypróbuj następujący kod:

android:windowSoftInputMode="adjustPan"

dodaj go do swojego manifest.xml w tagu działania działania, które zawiera dane wejściowe. przykład:

<activity
            android:name=".Activities.InputsActivity"
            ...
            android:windowSoftInputMode="adjustPan"
            />
Kuldeep Sakhiya
źródło
14
Najprostsza odpowiedź! Uwaga: należy to dodać w pliku manifestu i pod działaniem, które chcemy.
NRR
4
W moim przypadku to przynajmniej nie psuje mojego html, jak adjustResizeby to zrobił, ale obejmuje również moje pola wejściowe
Rahul Dole
8
To mi nie pomogło
vikifor
1
@vikifor, upewnij się, że dodałeś swój plik edittext do widoku przewijania. Nawet jeśli masz tylko 3-4 pola w swoim układzie, dodaj wszystkie pola do widoku przewijania. Dzięki temu można go przewijać po otwarciu klawiatury wirtualnej.
Kuldeep Sakhiya
Działa dobrze, ale ilekroć dotykam widoku EditText, klawiatura jest przerysowywana.
Iqbal
55

Miałem ten sam problem, w którym klawiatura programowa znajdowała się na górze widoków EditText, które zostały umieszczone na dole ekranu. Udało mi się znaleźć rozwiązanie, dodając jeden wiersz do odpowiedniego działania mojego pliku AndroidManifest.xml.

android:windowSoftInputMode="adjustResize|stateHidden"

Tak wygląda cały tag aktywności:

<activity
        android:name="com.my.MainActivity"
        android:screenOrientation="portrait"
        android:label="@string/title_activity_main"
        android:windowSoftInputMode="adjustResize|stateHidden" >
    </activity>

Tutaj najważniejszą wartością jest adjustResize. Spowoduje to przesunięcie całego interfejsu użytkownika w górę, aby zwolnić miejsce na klawiaturę programową.

DanKodi
źródło
Ale może to zepsuć wygląd twojego HTML, jeśli twój css ma głównie wartości procentowe
Rahul Dole,
Zgadujesz tutaj, czy próbowałeś? przy okazji nie powinno to zepsuć twojego HTML. Próbowałem z podglądami internetowymi. Będzie to przesuwanie całego widoku, a nie poszczególnych elementów.
DanKodi,
1
Próbowałem tego. Myślę, że dzieje się tak, ponieważ mój CSS ma głównie wartości procentowe
Rahul Dole
@DanKodi Próbowałem adjustResize|stateHiddeni nie miało to żadnego znaczenia adjustPan.
IgorGanapolsky
25

Dlaczego nie spróbować dodać ScrollView, aby zawijać wszystko, co chcesz przewijać. Oto, jak to zrobiłem, gdzie właściwie zostawiam nagłówek na górze, który nie przewija się, podczas gdy widżety dialogowe (w szczególności EditTexts) przewijają się po otwarciu miękkiej klawiatury.

<LinearLayout android:id="@+id/HeaderLayout" >
  <!-- Here add a header or whatever will not be scrolled. -->
</LinearLayout>
<ScrollView android:id="@+id/MainForm" >
  <!-- Here add your edittexts or whatever will scroll. -->
</ScrollView>

Zwykle miałbym LinearLayout wewnątrz ScrollView, ale to zależy od Ciebie. Ponadto ustawienie stylu paska przewijania na outsideInset pomaga, przynajmniej na moich urządzeniach.

zmilojko
źródło
4
Chociaż odpowiedź Mayry brzmi, co każdy powinien zrobić (i prawdopodobnie to, co według Google wszyscy powinni robić), to właśnie to robię prawie za każdym razem. To jedyny sposób na uzyskanie prawdziwej kontroli potrzebnej do poprawienia wyświetlania. Westchnienie.
Scott Biggs
nie lekceważ komentarza Scotta. To prawda. w moim przypadku nie chciałem zmieniać rozmiaru ani przesuwać widoku listy, ale chciałem użyć editText na końcu tej listy. Więc umieściłem editText w scrollView i działa zgodnie z oczekiwaniami.
Darpan
15

Wszystko, co musisz zrobić, to

android:isScrollContainer="true"

źródło: http://www.davidwparker.com/2011/08/25/android-fixing-window-resize-and-scrolling/

Ekundayo Blessing Funminiyi
źródło
1
Chociaż sama odpowiedź nie pomogła mi zbytnio (atrybut nie był potrzebny), połączone źródło zawiera pełne wyjaśnienie (formularz powinien być osadzony w ScrollView). Dzięki!
johndodo
Podobnie nic na stronie nie pomogło mi, ale link pokazał dodanie AdjustResize do działania windosSoftInputMode i to zadziałało.
Steven Smith
14

Przepraszamy za przywrócenie starego wątku, ale nikt nie wspomniał o ustawieniu android:imeOptions="flagNoFullscreen"w elemencie EditText

William Moffitt
źródło
7
android:windowSoftInputMode="adjustPan"
android:isScrollContainer="true"

działa na Androidzie EditText, podczas gdy nie działa z webview ani xwalkview. Gdy klawiatura programowa ukrywa dane wejściowe w przeglądarce internetowej lub xwalkview, której używaszandroid:windowSoftInputMode="adjustResize"

Kris Roofe
źródło
4

Uważam, że możesz sprawić, by przewijał się za pomocą kulki, co można ostatecznie osiągnąć programowo za pomocą metod selekcji, ale to tylko pomysł. Wiem, że metoda trackballa zazwyczaj działa, ale jeśli chodzi o dokładny sposób zrobienia tego i sprawienia, by działał z kodu, nie jestem pewien.
Mam nadzieję, że to pomoże.

Luis Miguel Serrano
źródło
Myślę, że potrzebuję sposobu na „sztuczne” wydłużenie okna, tak aby widok mógł się przewijać. Obecnie RelativeLayout jest ustawiony na android: layout_width = "wrap_content" android: layout_height = "wrap_content"
Alexis
Nie znam wtedy rozwiązania. Być może zechcesz ręcznie dostosować wartości szerokości i wysokości do swoich potrzeb, rozciągając je dalej do tego, do czego dąży "wrap_content".
Luis Miguel Serrano
1

dodaj tę pojedynczą linię do swojego względnego działania, w którym okładka klawiatury edytuje metodę text.inside onCreat ().

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
umesh shakya
źródło
0

Wiem, że to stare, ale żadne z powyższych rozwiązań nie zadziałało. Po szeroko zakrojonym debugowaniu rozwiązałem problem. Rozwiązaniem jest ustawienie android:windowTranslucentStatusatrybutu na false w pliku my styles.xml

Bestia77
źródło
0

Jeśli pole EditText jest objęte klawiaturą, użyj następującego kodu:

    EditText= findViewById(R.id.edittext)
    EditText?.getParent()?.requestChildFocus(EditText,EditText)

Jeśli chcesz, aby kursor znajdował się w zogniskowanym tekście edycji, użyj EditText.requestFocus()po tym, EditText?.getParent()?.requestChildFocus(EditText,EditText) co pomaga uzyskać fokus i kursor w zogniskowanym tekście edycji.

sameer tzar
źródło
-1

Edytuj plik AndroidManifest.xml

android:windowSoftInputMode="adjustResize"

Dodaj to do widoku głównego pliku układu.

android:fitsSystemWindows="true"

To wszystko.

Ahamed Riswan
źródło