Como mover o layout para cima quando o teclado virtual é mostrado android

85

Eu tenho uma tela de login com dois EditTexts e um botão de login no meu layout. O problema é que, quando começo a digitar, o teclado virtual é mostrado e cobre o botão de login. Como posso empurrar o layout para cima ou acima do teclado quando ele aparecer?

Não quero usar um ScrollView, apenas quero implementá-lo sem rolar para baixo. Por favor, me sugira alguma maneira de fazer isso. Desde já, obrigado.

Cavallo
fonte

Respostas:

59

Definir windowSoftInputModepropriedade para adjustPaneadjustResize

<activity android:windowSoftInputMode="adjustPan|adjustResize"> </activity>
Jeet
fonte
33
Isso não funcionou fora da caixa, mas alterá-lo para fazê- <activity android:windowSoftInputMode="adjustResize"></activity>lo funcionar.
nickiaconis
2
Mencione qual versão do Android você está usando. Algumas respostas podem ser totalmente inúteis em algumas versões.
Josh
como @nickiaconis disse, eu não preciso do parâmetro 'AdjustPan' e funciona para mim, obrigado
danisupr4
Existe um equivalente disponível para o projeto portátil Xamarin.Forms? portanto, não preciso fazer isso para cada plataforma de destino individual.
user20358
6
A configuração deve ser um dos valores listados na tabela a seguir, ou uma combinação de um valor de "estado ..." mais um valor de "ajustar ...". Definir vários valores em qualquer um dos grupos - vários valores de "estado ...", por exemplo - tem resultados indefinidos. developer.android.com/guide/topics/manifest/…
EmJiHash
34

Tente isso no arquivo de manifesto do Android correspondente à atividade.

<activity android:windowSoftInputMode="adjustPan"> </activity>
jency
fonte
1
meu loyout mover para cima na primeira vez, mas quando fechar o teclado e abrir novamente, não se mover
nabeghe,
24

Use este código no onCreate()método:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
Bobs
fonte
1
Obrigado, isso ajudou. <activity android: windowSoftInputMode = "AdjustPan"> </activity> não funcionou para mim por algum motivo.
DH28
1
Este método, mas usar em SOFT_INPUT_ADJUST_RESIZEvez de ADJUST_PAN, funcionou para mim
Viagem
17

android:windowSoftInputMode="adjustResize"

em sua tag de atividade dentro do arquivo Manifest fará o truque

Bhargav Thanki
fonte
Estou usando o ConstraintLayout, esta solução não funciona para mim.
Karan Sharma
No momento em que escrevi esta resposta, ConstraintLayout não foi adicionado aos layouts do Android. Você encontrará neste tópico qualquer outra solução que melhor se adapte a você. E certamente atualizarei minha resposta para ConstraintLayout assim que tiver tempo. Obrigado por relatar
Bhargav Thanki
13

Coloque esta linha no tempo de declaração de atividade em manifest.xml

<android:windowSoftInputMode="adjustPan">
Dayanand Waghmare
fonte
10

De alguma forma, consegui isso sabendo o status do teclado virtual no dispositivo. movo o layout para a posição y quando o teclado é mostrado e movido de volta para sua posição original quando não é mostrado. isso funciona bem, siga estas orientações.

Cavallo
fonte
2
Eu sou capaz de mover o layout para cima quando o teclado mostra, mas incapaz de mover para sua posição original enquanto o teclado está escondido, você pode me ajudar nisso?
Kishore
9
android:fitsSystemWindows="true"

adicionar propriedade no layout principal do arquivo de layout e

android:windowSoftInputMode="adjustResize"

adicione linha em seu arquivo Manifest.xml em seu Activty

é um trabalho perfeito para mim.

Kalsariya Devindra
fonte
fitSystemWindows não tem nada a ver com teclado
Tim
@TimCastelijns, no meu caso (atividade em tela cheia) tem importância. Se definido como false, as visualizações não serão movidas.
CoolMind
6

Coloque isso em sua declaração de atividade no arquivo de manifesto <activity android:windowSoftInputMode="adjustPan|adjustResize"> </activity>

ou se você quiser, pode adicionar o método onCreate () de sua atividade

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
Pradnya Kanase
fonte
2
O código do manifesto está errado, desta forma o comportamento é indefinido (você define dois valores de conflito, consulte offdoc: developer.android.com/guide/topics/manifest/… , android:windowSoftInputModedescrição). @ kiwicomb123, escolha um parâmetro ou o sistema escolherá para você (e esta escolha pode mudar em outro dispositivo / versão de API)
kpower
3

Isso é tudo o que é necessário:

<activity android:windowSoftInputMode="adjustResize"> </activity>
Bolling
fonte
2

De acordo com este guia , a maneira correta de fazer isso é declarando em seu manifesto:

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

    </activity>
David_E
fonte
Parece que o stateVisible fará com que ele seja aberto quando a atividade começar, portanto, não é necessário empurrar o teclado para cima.
CodyEngel
2

Quando o softkeyboard aparece, ele muda o tamanho do layout principal, e o que você precisa fazer é criar um listener para aquele mainlayout e dentro desse listener, adicionar o código scrollT0(x,y)para rolar para cima.

Dila Gurung
fonte
2

Se você estiver trabalhando com o xamarin, pode colocar este código WindowSoftInputMode =Android.Views.SoftInput.AdjustPan | Android.Views.SoftInput.AdjustResizeno atributo activity da classe MainActivity. Por exemplo, agora o atributo de atividade será semelhante a abaixo

    [Activity(WindowSoftInputMode =Android.Views.SoftInput.AdjustPan | Android.Views.SoftInput.AdjustResize)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
    {
        //some code here.
    }
Tushar Patel
fonte
2

Eu resolvo isso adicionando código ao manifesto:

<activity android:name=".Login"
        android:fitsSystemWindows="true"
        android:windowSoftInputMode="stateHidden|adjustPan"
</activity>
Sandeep Sankla
fonte
perfeito. fitSystemWindows funcionou para mim.
Bawa
1

Você deveria usar

android:windowSoftInputMode="adjustPan|stateHidden"

em seu AndroidManifest.xmlarquivo onde você está declarando sua atividade. Isso ajustará o conteúdo do seu layout, quando o teclado for mostrado no layout.

Farhan Ghaffar
fonte
0

Use o layout Relativo para ajustar a visualização para que você possa ver essa visualização enquanto digita o texto

Mahesh
fonte
0

Isso funciona como um encanto para mim

getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
droidchef
fonte
-2

Isso definitivamente funcionará para você.

android: windowSoftInputMode = "ajustarPan"

Sanjay Kumar
fonte
1
Você pode adicionar alguma explicação ...?
chevybow
Vá para o arquivo AndroidManifest.xml e esta tag para a atividade que você deseja rolar no teclado pop-up
sanjay kumar