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

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.