O teclado virtual do Android cobre o campo EditText

161

Existe uma maneira de fazer a tela rolar para permitir que o campo de texto seja visto?

Alexis
fonte

Respostas:

163

Você está perguntando como controlar o que é visível quando o teclado virtual é aberto? Você pode querer jogar com o windowSoftInputMode . Veja os documentos do desenvolvedor para mais discussão.

Cheryl Simon
fonte
2
Isso funciona bem, mas verifique se você tem <item name = "android: windowIsFloating"> true </item> no seu estilo de diálogo, caso esteja usando um estilo de diálogo personalizado.
Dmitry Chistyakov
Parece que isso não funciona no modo paisagem (Nexus 7), o elemento editável permanece oculto no teclado. Eu tentei diferentes combinações de windowSoftInputMode. Parece que não consigo definir windowIsFloating porque o ActionBar não suporta. Ou também pode ter algo a ver com o fato de meu EditText estar dentro do item de exibição de lista?
Sampo Sarrala - codidact.org
Isso não funcionará depois de adicionar <item name = "android: windowTranslucentStatus"> true </item> nos meus. Alguém corrigiu isso?
Max
1
@Max Adicione android:fitsSystemWindows="true"à sua visualização root para resolver isso.
David Passmore
1
E sobre a puxar o layout completo acima do teclado quando teclado virtual está disponível não importa o que como whatsapp ....
Karue Benson Karue
162

Eu tive os mesmos problemas. Tente o seguinte código:

android:windowSoftInputMode="adjustPan"

adicione-o ao seu manifest.xml na tag de atividade da atividade que contém a entrada. exemplo:

<activity
            android:name=".Activities.InputsActivity"
            ...
            android:windowSoftInputMode="adjustPan"
            />
Kuldeep Sakhiya
fonte
14
Resposta mais simples! Apenas como uma observação, isso precisa ser adicionado no arquivo Manifest e na atividade que queremos.
NRR 27/05
4
No meu caso, isso pelo menos não atrapalhar meu html, como adjustResizefaria, mas abrange também os meus campos de entrada
Rahul Dole
8
Isso não me ajudou
vikifor 12/12/2015
1
@ Vikifor, adicione seu edittext ao scrollview. Mesmo se você tiver apenas de 3 a 4 campos em seu layout, adicione todos os seus campos na visualização de rolagem. Isso o torna rolável quando o teclado virtual é aberto.
Kuldeep Sakhiya
Funciona bem, mas sempre que toco na visualização EditText, o teclado é redesenhado.
Iqbal
55

Eu tive o mesmo problema em que a tecla programável estava no topo das visualizações EditText, que foram colocadas na parte inferior da tela. Consegui encontrar uma solução adicionando uma única linha à atividade relevante do meu arquivo AndroidManifest.xml.

android:windowSoftInputMode="adjustResize|stateHidden"

É assim que toda a tag de atividade se parece:

<activity
        android:name="com.my.MainActivity"
        android:screenOrientation="portrait"
        android:label="@string/title_activity_main"
        android:windowSoftInputMode="adjustResize|stateHidden" >
    </activity>

Aqui, o valor mais importante é o AdjustResize. Isso mudará toda a interface do usuário para dar espaço para o teclado programável.

DanKodi
fonte
Mas isso pode estragar a aparência do seu html se o seu css tem principalmente valores percentuais
Rahul Dole
Você está adivinhando aqui ou você tentou? btw não deve atrapalhar o seu html. Eu tentei com visualizações na web. Isso mudará a visão inteira, não os elementos individuais.
DanKodi
1
Eu tentei. Eu acho que isso acontece porque o meu css tem principalmente valores percentuais
Rahul Dole
@ DanKodi eu tentei adjustResize|stateHiddene não fez nenhuma diferença adjustPan.
IgorGanapolsky
25

Por que não tentar adicionar um ScrollView para envolver o que você deseja rolar? Aqui está como eu fiz isso, onde na verdade deixo um cabeçalho no topo que não rola, enquanto os widgets da caixa de diálogo (em particular os EditTexts) rolam quando você abre o teclado virtual.

<LinearLayout android:id="@+id/HeaderLayout" >
  <!-- Here add a header or whatever will not be scrolled. -->
</LinearLayout>
<ScrollView android:id="@+id/MainForm" >
  <!-- Here add your edittexts or whatever will scroll. -->
</ScrollView>

Normalmente, eu teria um LinearLayout dentro do ScrollView, mas isso é com você. Além disso, definir o estilo da barra de rolagem como outsideInset ajuda, pelo menos nos meus dispositivos.

zmilojko
fonte
4
Embora a resposta de Mayra seja o que todos deveriam fazer (e provavelmente o que o Google pensava que todos deveriam fazer), é isso que acabo fazendo quase sempre. É a única maneira de obter o controle real necessário para tornar a exibição correta. Suspiro.
Scott Biggs
não subestime o comentário de Scott. É verdade. no meu caso, não queria redimensionar ou fazer pan na minha lista, mas queria pegar o editText no final dessa lista. Então, eu coloquei editText no scrollView e funciona como esperado.
Darpan
15

Tudo que você precisa fazer é

android:isScrollContainer="true"

fonte: http://www.davidwparker.com/2011/08/25/android-fixing-window-resize-and-scrolling/

Ekundayo Blessing Funminiyi
fonte
1
Embora a resposta em si não tenha me ajudado muito (o atributo não era necessário), a fonte vinculada contém a explicação completa (o formulário deve ser incorporado no ScrollView). Obrigado!
Johndodo 31/08/16
Da mesma forma, nada na página me ajudou, mas o link mostrou a adição do AdjustResize à atividade windosSoftInputMode e isso funcionou.
steven smith
14

Desculpe por reviver um thread antigo, mas ninguém mencionou a configuração android:imeOptions="flagNoFullscreen"no seu elemento EditText

William Moffitt
fonte
7
android:windowSoftInputMode="adjustPan"
android:isScrollContainer="true"

funciona para o Android EditText, enquanto não funciona para webview ou xwalkview. Quando o teclado virtual oculta a entrada no webview ou no xwalkview que você usaandroid:windowSoftInputMode="adjustResize"

Kris Roofe
fonte
4

Eu acredito que você pode fazer rolagem usando o trackball, que pode ser alcançado programaticamente através de métodos de seleção, mas é apenas uma idéia. Eu sei que o método trackball normalmente funciona, mas quanto à maneira exata de fazer isso e fazê-lo funcionar a partir do código, não tenho certeza.
Espero que ajude.

Luis Miguel Serrano
fonte
O que eu acho que preciso é de uma maneira de tornar a janela "artificialmente" mais longa para que a exibição possa rolar. Atualmente o RelativeLayout está definido para android: layout_width = "wrap_content" android: layout_height = "wrap_content"
Alexis
Não conheço uma solução então. Talvez você queira ajustar manualmente os valores de largura e altura para atender às suas necessidades, estendendo-os ainda mais para o que "wrap_content" está resolvendo.
Luis Miguel Serrano
1

adicione essa linha única à sua atividade relativa, onde a capa do teclado edita o método de atividade text.inside onCreat ().

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
umesh shakya
fonte
0

Eu sei que isso é antigo, mas nenhuma das soluções acima funcionou para mim. Após uma extensa depuração, descobri o problema. A solução está configurando o android:windowTranslucentStatusatributo como false em meus styles.xml

Beast77
fonte
0

Se o campo EditText estiver coberto pelo KeyBoard, use o seguinte código:

    EditText= findViewById(R.id.edittext)
    EditText?.getParent()?.requestChildFocus(EditText,EditText)

Se você deseja que o Cursor esteja no EditText Focado, use-o EditText.requestFocus()após o EditText?.getParent()?.requestChildFocus(EditText,EditText) que ajuda a obter o foco e o Cursor no EditText Focado.

Sameer Tzar
fonte
-1

Edite seu AndroidManifest.xml

android:windowSoftInputMode="adjustResize"

Adicione isso à sua visualização raiz do arquivo Layout.

android:fitsSystemWindows="true"

Isso é tudo.

Ahamed Riswan
fonte