Le clavier virtuel Android couvre le champ EditText


Réponses:


163

Demandez-vous comment contrôler ce qui est visible lorsque le clavier virtuel s'ouvre? Vous voudrez peut-être jouer avec le windowSoftInputMode . Consultez la documentation du développeur pour plus de détails.


2
Cela fonctionne bien, mais assurez-vous d'avoir <item name = "android: windowIsFloating"> true </item> dans votre style de dialogue, au cas où vous utiliseriez un style de dialogue personnalisé.
Dmitry Chistyakov

Il semble que cela ne fonctionne pas en mode paysage (Nexus 7), l'élément modifiable reste caché sous le clavier. J'ai essayé différentes combinaisons de windowSoftInputMode. Il semble que je ne puisse pas définir windowIsFloating car ActionBar ne le prend pas en charge. Ou cela pourrait aussi avoir quelque chose à voir avec le fait que mon EditText est à l'intérieur de l'élément d'affichage de liste?
Sampo Sarrala - codidact.org

Cela ne fonctionnera pas après avoir ajouté <item name = "android: windowTranslucentStatus"> true </item> dans mon fichier. Quelqu'un a résolu ça?
Max

1
@Max Ajoutez android:fitsSystemWindows="true"à votre vue racine pour résoudre ce problème.
David Passmore

1
Que diriez-vous de tirer la disposition complète au-dessus du clavier lorsque le clavier logiciel est disponible, peu importe ce que WhatsApp ...
Karue Benson Karue

162

J'ai eu les mêmes problèmes. Essayez le code suivant:

android:windowSoftInputMode="adjustPan"

ajoutez-le à votre manifest.xml dans la balise d'activité de l'activité qui contient l'entrée. exemple:

<activity
            android:name=".Activities.InputsActivity"
            ...
            android:windowSoftInputMode="adjustPan"
            />

14
Réponse la plus simple! Juste à titre de note, cela doit être ajouté dans le fichier Manifest et sous l'activité que nous voulons.
NRR

4
Dans mon cas, cela au moins ne gâche pas mon html, comme le adjustResizeferait, mais cela couvre également mes champs de saisie
Rahul Dole

8
Cela ne m'a pas aidé
vikifor

1
@vikifor, assurez-vous d'ajouter votre edittext dans scrollview. Même si vous n'avez que 3-4 champs dans votre mise en page, ajoutez tous vos champs dans scrollview. Cela permet de le faire défiler lorsque le clavier virtuel s'ouvre.
Kuldeep Sakhiya

Fonctionne bien, mais chaque fois que je touche la vue EditText, le clavier est redessiné.
Iqbal

55

J'ai eu le même problème où le clavier logiciel était au-dessus des vues EditText qui étaient placées en bas de l'écran. J'ai pu trouver une solution en ajoutant une seule ligne à l'activité pertinente de mon fichier AndroidManifest.xml.

android:windowSoftInputMode="adjustResize|stateHidden"

Voici à quoi ressemble l'ensemble de la balise d'activité:

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

Ici, la valeur la plus importante est la valeur AdjustResize. Cela déplacera toute l'interface utilisateur vers le haut pour laisser de la place au clavier logiciel.


Mais cela peut gâcher l'apparence de votre html si votre css a principalement des valeurs en pourcentage
Rahul Dole

Êtes-vous en train de deviner ici ou avez-vous essayé? btw il ne devrait pas gâcher votre html. J'ai essayé avec les webviews. Cela changera la vue d'ensemble et non les éléments individuels.
DanKodi

1
Je l'ai essayé. Je pense que cela arrive parce que mon css a principalement des valeurs en pourcentage
Rahul Dole

@DanKodi J'ai essayé adjustResize|stateHiddenet cela ne faisait aucune différence adjustPan.
IgorGanapolsky

25

Pourquoi ne pas essayer d'ajouter un ScrollView pour envelopper tout ce que vous voulez faire défiler. Voici comment je l'ai fait, où je laisse en fait un en-tête en haut qui ne défile pas, tandis que les widgets de la boîte de dialogue (en particulier les EditTexts) défilent lorsque vous ouvrez le clavier logiciel.

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

J'aurais généralement un LinearLayout à l'intérieur du ScrollView, mais cela dépend de vous. De plus, définir le style de la barre de défilement sur OutsideInset aide, du moins sur mes appareils.


4
Bien que la réponse de Mayra soit ce que tout le monde devrait faire (et probablement ce que Google pensait que tout le monde devrait faire), c'est ce que je finis par faire presque à chaque fois. C'est le seul moyen d'obtenir le contrôle réel nécessaire pour que l'affichage soit correct. Soupir.
Scott Biggs

ne sous-estimez pas le commentaire de Scott. C'est vrai. dans mon cas, je ne voulais pas redimensionner ou faire un panoramique de ma liste, mais je voulais reprendre le editText à la fin de cette liste. Donc, j'ai mis editText dans scrollView et cela fonctionne comme prévu.
Darpan

15

Tout ce que tu as à faire c'est

android:isScrollContainer="true"

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


1
Alors que la réponse elle-même ne m'a pas beaucoup aidé (l'attribut n'était pas nécessaire), la source liée contient l'explication complète (le formulaire doit être intégré dans ScrollView). Merci!
johndodo

De même, rien sur la page ne m'a aidé, mais le lien montrait l'ajout de AdjustResize à l'activité windosSoftInputMode et cela a fonctionné.
steven smith

14

Désolé d'avoir relancé un ancien fil, mais personne n'a mentionné le paramètre android:imeOptions="flagNoFullscreen"dans votre élément EditText


7
android:windowSoftInputMode="adjustPan"
android:isScrollContainer="true"

fonctionne pour Android EditText, alors qu'il ne fonctionne pas pour webview ou xwalkview. Lorsque le clavier virtuel masque l'entrée dans Webview ou xwalkview que vous avez utiliséandroid:windowSoftInputMode="adjustResize"


4

Je crois que vous pouvez le faire défiler en utilisant la boule de commande, ce qui pourrait être réalisé par programmation par le biais de méthodes de sélection éventuellement, mais ce n'est qu'une idée. Je sais que la méthode trackball fonctionne généralement, mais quant à la façon exacte de le faire et de la faire fonctionner à partir du code, je ne suis pas sûr.
J'espère que cela pourra aider.


Ce dont je pense avoir besoin, c'est d'un moyen de rendre la fenêtre "artificiellement" plus longue pour que la vue puisse défiler. Actuellement, RelativeLayout est défini sur android: layout_width = "wrap_content" android: layout_height = "wrap_content"
Alexis

Je ne connais donc pas de solution. Peut-être voudrez-vous ajuster manuellement les valeurs de largeur et de hauteur en fonction de vos besoins, en les étirant davantage à ce que "wrap_content" résout.
Luis Miguel Serrano

1

ajoutez cette seule ligne à votre activité relative où la couverture du clavier modifie la méthode d'activité text.inside onCreat ().

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

0

Je sais que c'est vieux mais aucune des solutions ci-dessus n'a fonctionné pour moi. Après un débogage approfondi, j'ai résolu le problème. La solution définit l' android:windowTranslucentStatusattribut sur false dans mon styles.xml


0

Si le champ EditText est couvert par le KeyBoard, utilisez le code suivant:

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

Si vous souhaitez que le curseur se trouve dans le Focused EditText, utilisez-le EditText.requestFocus()après le, EditText?.getParent()?.requestChildFocus(EditText,EditText) ce qui permet d'obtenir le focus et le curseur dans le Focused EditText.


-1

Modifiez votre AndroidManifest.xml

android:windowSoftInputMode="adjustResize"

Ajoutez ceci à votre vue racine du fichier de mise en page.

android:fitsSystemWindows="true"

C'est tout.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.