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 .


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"
            />

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ą.


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.


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/


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


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"


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.


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

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


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.


-1

Edytuj plik AndroidManifest.xml

android:windowSoftInputMode="adjustResize"

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

android:fitsSystemWindows="true"

To wszystko.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.