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.

Respostas:


59

Definir windowSoftInputModepropriedade para adjustPaneadjustResize

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

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>

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

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

só

android:windowSoftInputMode="adjustResize"

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


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

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.


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.


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

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>

2

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

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

    </activity>

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.


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

2

Eu resolvo isso adicionando código ao manifesto:

<activity android:name=".Login"
        android:fitsSystemWindows="true"
        android:windowSoftInputMode="stateHidden|adjustPan"
</activity>

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.


0

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


0

Isso funciona como um encanto para mim

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

-2

Isso definitivamente funcionará para você.

android: windowSoftInputMode = "ajustarPan"


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.