2012-07-02 9 views
56

Szukałem wszędzie rozwiązania mojego problemu, ale nie mogę znaleźć odpowiedzi. Oto problem.Treść wypychana po kliknięciu w tekst edycji

Mam układ, który wygląda tak

Image is here

Teraz po kliknięciu w edycji tekstu (paska wyszukiwania) Chcę po wydarzy

Image is here

Miękka Klawiatura zasadniczo musi przesuwać zawartość całego ekranu, aby pasek wyszukiwania znajdował się na górze, a jego widok listy był poniżej, tak aby po przeszukaniu zawartości wyświetlane były wyniki. Próbowałem ustawić android:windowSoftInputMode="adjustPan" na Activity w manifeście, ale to nie zadziałało. Ustawiłem widok przewijania jako główny kontener w głównym układzie, który zawiera fragmenty, ale to też nie zadziałało. Próbowałem dodać tekst edycji (pasek wyszukiwania) jako nagłówek widoku listy, ale to też nie zadziałało. Za każdym razem, gdy klawiatura przesuwała tekst edycji, ale obejmowała widok listy. Czy jest jakiś sposób, aby to zadziałało?

Odpowiedz

67

Właściwie, jeśli chcesz, aby cały układ przesuwać w górę niż należy użyć:

SOFT_INPUT_ADJUST_PAN

znaczenie:

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

to zachowa klawiaturę zamknięte, a po otwarciu będzie to push cała aktywność w górę.

+2

Jesteś niesamowity! – Eenvincible

+0

Ale układ jest wypychany po wprowadzeniu pierwszego znaku w polu edycji. – Nivedh

+4

'adjustpan' działa dobrze, ale jednocześnie chcę, żeby moje guziki, które są na dole, zostały umieszczone nad klawiaturą (co jest w zasadzie osiągnięte za pomocą' adjustResize' ale potem nie przesuwa całego układu w górę co ostatecznie ukrywa pole tekstowe, w którym wprowadzam danych.Czy ktokolwiek może pomóc? – driftking9987

7

Wypróbuj android:windowSoftInputMode="adjustResize" w pliku manifestu.

Być może trzeba zrobić android:windowSoftInputMode="adjustResize|adjustPan" ... Naprawdę nie ma nic porównywalnego do konfiguracji do przetestowania na ...

Twój problem jest becasue tego (od docs dla adjustPan, podkreślenie moje) :

Główne okno aktywności nie jest zmieniane, aby zrobić miejsce na miękką klawiaturę . Przeciwnie, zawartość okna są automatycznie przesuwane tak że obecny nacisk nigdy nie jest zasłonięty przez klawiaturę i użytkownicy zawsze może zobaczyć, co oni piszą

Biorąc pod uwagę, że lista jest zasłonięte becasue EditText na górze ma fokus. Jedyne, co obecnie mogę myśleć, to przesunąć EditText tak, by znalazł się poniżej listy. Następnie, gdy zostanie przesunięty w górę, twoja lista powinna być nadal widoczna nad EditText.

+0

Dzięki za odpowiedź. Próbowałem, nie działa. Zmiana rozmiaru działa, ale powoduje, że zawartość jest spłaszczona u góry ekranu i wygląda naprawdę źle, a zawartość listy nie jest wyświetlana, gdy używana jest funkcja adjustResize. – Neil

+0

Zaktualizowałem moją odpowiedź, a nie prawdziwe rozwiązanie, ale możliwe obejście problemu. – Barak

+0

Witam Baraka Próbowałem przenieść EditText pod listview, ale to nie zadziałało. Pomyślałem także, że powinno, ale popchnął EditText nad listview i ukrył całą zawartość listy. – Neil

3

Nie mogłem znaleźć rozwiązania, aby układ automatycznie się zmienił, więc musiałem go zhackować. Użyłem kodu, który znalazłem w mojej głównej aktywności pod numerem here, aby wykryć, kiedy klawiatura jest otwarta. Właśnie dodałem kod do wywołania metody, która ukrywa moje dwa najlepsze fragmenty po otwarciu klawiatury. To nie jest tak naprawdę to, co chciałem zrobić, ale działa.

8

Podejrzewam podobny problem, rozwiązanie było proste.

Jeśli motyw w działaniu ustawiony jest jako Pełny ekran @android:style/Theme.Holo.NoActionBar.FullScreen, klawiatura nie przesuwała zawartości do góry.

Po zmianie czynności na @android:style/Theme.Holo.NoActionBar, klawiatura przesuwa zawartość aktywności w górę.

+0

Dziękuję koleś! Ale czy wiesz, jak ustawić to na pełny ekran? –

+0

Chcę również, aby zawartość pełnoekranowa i nawet zawartość nie powinny rosnąć. Jakieś rozwiązanie? – Nikita

19

Można tego użyć w klasie fragmentów, aby przenieść tekst Edytuj i przewiń do końca.

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

To zadziała na pewno, jeśli motyw aktywności fragmentu nie znajduje się w pełnym ekranie.

Mam nadzieję, że to pomoże!

+0

to działa bez zarzutu, ale układ jest wypychany po wpisaniu pierwszego znaku w polu edycji. jak rozwiązać? Daj mi znać, jeśli wiesz, – siva

+0

@siva Me również stoi przed tym samym problemem – Nivedh

+0

Pracował! Wielkie dzięki – dearvivekkumar

10

To zadziałało dla mnie.

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE|WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); 
1

używam to dla mojego EditText logowanie:

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN|WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); 

Kilka uwag na temat tej metody:

this odnosi się do kontekstu, jak getActivity() nie zawsze jest korzystne

.SOFT_INPUT_STATE_HIDDEN //for default hidden state when activity loads 

.SOFT_INPUT_STATE_VISIBLE //for auto open keyboard when activity loads 

Działa za każdym razem!

9

Spróbuj

android:windowSoftInputMode="adjustResize" 

Praca dla mnie.

3

Ten pracował dla mnie, dla fragmentu, po prostu zadeklarować ją w jawnym z działalności:

android:windowSoftInputMode="adjustPan" 

powodzenia!

+0

Mam kilka scroolviews i względne układy wewnątrz przewijania, gdzie są moje widoki edytor tekstu. To zdecydowanie działa. Myślałem, że będę musiał umieścić to w każdym edytorze tekstu, okazuje się, że to takie proste, hehe. ♥ –

0

Jeśli ktoś nadal stoi ten problem:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:id="@+id/view" 
    **android:fitsSystemWindows="true"** 
    android:layout_height="match_parent"> 

dodać w układzie:

android:fitsSystemWindows="true" 

Mam nadzieję, że to rozwiąże problem - pracował dla mnie.

Powiązane problemy