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

Odpowiedzi:


59

Ustaw windowSoftInputModewłaściwość na adjustPaniadjustResize

<activity android:windowSoftInputMode="adjustPan|adjustResize"> </activity>

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>

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

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ę


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

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.


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.


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

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>

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>

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


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

0

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


0

Dla mnie to działa jak urok

getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

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.


-2

To na pewno zadziała dla Ciebie.

android: windowSoftInputMode = "adjustPan"


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