Jak przesunąć układ w górę, gdy wyświetlana jest klawiatura programowa Android

85

Mam ekran logowania z dwoma EditTextsi przyciskiem logowania w moim układzie. Problem w tym, że kiedy zaczynam pisać, pojawia się klawiatura programowa i zakrywa przycisk logowania. Jak mogę przesunąć układ w górę lub nad klawiaturę, gdy się pojawi?

Nie chcę używać a ScrollView, po prostu chcę go zaimplementować bez przewijania w dół. Proszę, zasugeruj mi, jak to zrobić. Z góry dziękuję.

cavallo
źródło

Odpowiedzi:

59

Ustaw windowSoftInputModewłaściwość na adjustPaniadjustResize

<activity android:windowSoftInputMode="adjustPan|adjustResize"> </activity>
jeet
źródło
32
To nie zadziałało po wyjęciu z pudełka, ale zmieniło to, aby <activity android:windowSoftInputMode="adjustResize"></activity>działało.
nickiaconis
2
Wspomnij, której wersji Androida używasz. Niektóre odpowiedzi mogą być całkowicie bezużyteczne w niektórych wersjach.
Josh
jak powiedział @nickiaconis, nie potrzebuję parametru 'adjustPan' i u mnie działa, dziękuję
danisupr4
Czy jest dostępny odpowiednik dla przenośnego projektu Xamarin.Forms? więc nie muszę tego robić dla każdej platformy docelowej.
user20358
6
Ustawienie musi być jedną z wartości wymienionych w poniższej tabeli lub kombinacją jednej wartości „stanu ...” i jednej wartości „wyreguluj ...”. Ustawienie wielu wartości w dowolnej grupie - na przykład wielu wartości „stanu ...” - ma niezdefiniowane wyniki. developer.android.com/guide/topics/manifest/…
EmJiHash
34

Spróbuj tego w pliku manifestu Androida odpowiadającym działaniu.

<activity android:windowSoftInputMode="adjustPan"> </activity>
jency
źródło
1
mój loyout przesuwa się do góry za pierwszym razem, ale po zamknięciu klawiatury i ponownym otwarciu nie ruszaj się.
nabeghe
24

Użyj tego kodu w onCreate()metodzie:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
Bobs
źródło
1
Dzięki, to pomogło. <activity android: windowSoftInputMode = "adjustPan"> </activity> z jakiegoś powodu nie zadziałał.
DH28
1
Ta metoda, ale SOFT_INPUT_ADJUST_RESIZEzamiast ADJUST_PAN, zadziałała dla mnie
Voy
16

tylko

android:windowSoftInputMode="adjustResize"

w tagu aktywności w pliku Manifest załatwi sprawę

Bhargav Thanki
źródło
Używam ConstraintLayout, to rozwiązanie nie działa dla mnie.
Karan Sharma
W chwili pisania tej odpowiedzi ConstraintLayout nie został dodany do układów systemu Android. W tym wątku znajdziesz inne rozwiązanie, które najbardziej Ci odpowiada. I na pewno zaktualizuję moją odpowiedź na ConstraintLayout, gdy będę mieć czas. Dzięki za zgłoszenie
Bhargav Thanki
12

Umieść ten wiersz w godzinie deklaracji aktywności w pliku manifest.xml

<android:windowSoftInputMode="adjustPan">
Dayanand Waghmare
źródło
10

W jakiś sposób osiągnąłem to, znając stan miękkiej klawiatury na urządzeniu. Przenoszę układ do pozycji y, gdy klawiatura jest wyświetlana, i cofam ją do pierwotnego położenia, gdy nie jest wyświetlana. to działa dobrze, postępowałem zgodnie z tymi wytycznymi.

cavallo
źródło
2
Jestem w stanie przesunąć układ w górę, gdy wyświetla się klawiatura, ale nie mogę przenieść się do pierwotnej pozycji, gdy klawiatura jest ukryta, możesz mi w tym pomóc.
Kishore
9
android:fitsSystemWindows="true"

dodaj właściwość do głównego układu pliku układu i

android:windowSoftInputMode="adjustResize"

dodaj wiersz w pliku Manifest.xml na swoim Activty

to dla mnie idealna praca.

Kalsariya Devindra
źródło
fitSystemWindows nie ma nic wspólnego z klawiaturą
Tim
@TimCastelijns, w moim przypadku (aktywność na pełnym ekranie) ma to znaczenie. Jeśli ustawisz false, liczba wyświetleń nie wzrośnie.
CoolMind
6

Umieść to w swojej deklaracji aktywności w pliku manifestu <activity android:windowSoftInputMode="adjustPan|adjustResize"> </activity>

lub jeśli chcesz, możesz dodać metodę onCreate () swojego działania

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
Pradnya Kanase
źródło
2
Kod manifestu jest nieprawidłowy, w ten sposób zachowanie jest niezdefiniowane (ustawiasz dwie wartości konfliktu, patrz offdoc: developer.android.com/guide/topics/manifest/… , android:windowSoftInputModeopis). @ kiwicomb123, wybierz jeden parametr lub system wybierze za Ciebie (i ten wybór może się zmienić na innym urządzeniu / wersji API)
kpower
3

To wszystko, czego potrzeba:

<activity android:windowSoftInputMode="adjustResize"> </activity>
Bolling
źródło
2

Zgodnie z tym przewodnikiem , prawidłowym sposobem osiągnięcia tego jest zadeklarowanie w swoim manifeście:

<activity name="EditContactActivity"
        android:windowSoftInputMode="stateVisible|adjustResize">

    </activity>
David_E
źródło
Wygląda na to, że stateVisible spowoduje otwarcie go po rozpoczęciu działania, więc nie jest konieczne podnoszenie klawiatury.
CodyEngel
2

Kiedy pojawi się klawiatura programowa, zmienia rozmiar głównego układu, a to, co musisz zrobić, to utworzyć odbiornik dla tego głównego odtwarzacza, a wewnątrz tego odbiornika dodaj kod, scrollT0(x,y)aby przewinąć w górę.

Dila Gurung
źródło
2

Jeśli pracujesz z platformą Xamarin, możesz umieścić ten kod WindowSoftInputMode =Android.Views.SoftInput.AdjustPan | Android.Views.SoftInput.AdjustResizew atrybucie activity klasy MainActivity. Na przykład teraz atrybut aktywności będzie wyglądał jak poniżej

    [Activity(WindowSoftInputMode =Android.Views.SoftInput.AdjustPan | Android.Views.SoftInput.AdjustResize)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
    {
        //some code here.
    }
Tushar Patel
źródło
0

Skorzystaj z układu względnego, aby dostosować widok, abyś mógł zobaczyć ten widok podczas wpisywania tekstu

Mahesh
źródło
0

Dla mnie to działa jak urok

getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
droidchef
źródło
0

Powinieneś użyć

android:windowSoftInputMode="adjustPan|stateHidden"

w AndroidManifest.xmlpliku, w którym deklarujesz swoją aktywność. Spowoduje to dostosowanie zawartości układu, gdy w układzie jest wyświetlana klawiatura.

Farhan Ghaffar
źródło
-2

To na pewno zadziała dla Ciebie.

android: windowSoftInputMode = "adjustPan"

sanjay kumar
źródło
1
Czy możesz dodać wyjaśnienie ...?
chevybow
Po prostu przejdź do pliku AndroidManifest.xml i zaznacz tę czynność, którą chcesz przewinąć na klawiaturze
sanjay kumar