O teclado virtual do Android cobre o campo EditText


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.


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

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.


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.


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/


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


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"


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.


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

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


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.


-1

Edite seu AndroidManifest.xml

android:windowSoftInputMode="adjustResize"

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

android:fitsSystemWindows="true"

Isso é tudo.

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.