L'ajustement Android ne fonctionne pas après la première fois

Mon problème: à partir de la deuxième fois que le clavier du logiciel est affiché sur l'écran, il cache entièrement mon EditText.

Attribut android: windowSoftInputMode = "adjustPan" a été spécifié dans AndroidManifest.xml, mais il fonctionne uniquement la première fois.

  • Comment faire une vue Android qui bascule entre les vues sur swipe / fling
  • Mettre à jour la barre de progression dans listview pour le téléchargement de fichiers multiples
  • Android ListView scrollbarStyle
  • Utilisation de GSON avec proguard activé
  • L'activité principale n'est pas récupérée après la destruction puisqu'elle est référencée indirectement par InputMethodManager
  • Snackbar ne fonctionne pas dans la classe de fragment
  • J'ai la disposition suivante:

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="464dp" android:gravity="top" android:orientation="vertical" android:paddingLeft="16dp" android:paddingRight="16dp" > <ListView android:id="@+id/list" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="10" android:background="#E3E3E2" android:gravity="top" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <EditText android:id="@+id/addListText" android:layout_width="0dp" android:layout_height="48dp" android:layout_weight="10" android:contentDescription="@string/addItemContentDescription" android:gravity="bottom|center_horizontal" android:inputType="textLongMessage" android:textColor="#E3E3E2" android:visibility="gone" /> <ImageButton android:id="@+id/addTextListButton" android:layout_width="0dp" android:layout_height="48dp" android:layout_weight="1" android:layout_gravity="right" android:background="@android:color/transparent" android:contentDescription="@string/addItemButton" android:scaleType="fitCenter" android:src="@drawable/plus_add" android:visibility="gone" /> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="fill_parent" android:gravity="bottom|center_horizontal" android:orientation="horizontal" android:paddingLeft="16dp" android:paddingRight="16dp" > <ImageButton android:id="@+id/syncListsButton" android:layout_width="64dp" android:layout_height="match_parent" android:src="@android:drawable/ic_popup_sync" /> <ImageButton android:id="@+id/showOrHide" android:layout_width="64dp" android:layout_height="match_parent" /> <ImageButton android:id="@+id/delListButton" android:layout_width="64dp" android:layout_height="match_parent" android:src="@android:drawable/ic_menu_delete" /> </LinearLayout> </LinearLayout> 

    Le bouton "showOrHide" affiche / cache le combo "addListText" / "addTextListButton".

    Lorsque EditText est affiché pour la première fois et je le touche, le clavier doux apparaît sur l'écran et le combo "addListText" / "addTextListButton" est affiché correctement. Lorsque je masque le clavier et que je le montre encore, le clavier couvre complètement ma boîte de dialogue addListText!

    Une idée sur ce qui se passe? Je le teste sur Android 4.2.2.

    Aidez-nous! Merci 🙂

    Edit: J'ai également essayé de mettre le premier LinearLayout dans une ScrollView mais ça ne marche pas!

  • Android: Est-il possible de faire une copie d'une vue?
  • Android Spinner avec différentes mises en page pour "état déroulant" et "état fermé"?
  • Android - bouton Précédent dans la barre de titre
  • Android, qu'est-ce que l'attribut clipToPadding fait?
  • Envoi d'un objet à un service par Intention sans liaison
  • Des choses à faire en Fragments?
  • 7 Solutions collect form web for “L'ajustement Android ne fonctionne pas après la première fois”

    Sous-classé EditText et remplacé la méthode onKeyPreIme (int keyCode, événement KeyEvent) comme ceci:

      @Override public boolean onKeyPreIme(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK) { clearFocus(); } return super.onKeyPreIme(keyCode, event); } 

    Maintenant, lorsque la touche Retour est enfoncée, EditText a perdu la mise au point. Ensuite, le tapoter à nouveau ajustement fonctionnera.

    Cela peut sembler un peu stupide, mais j'ai rencontré ce problème lorsque j'ai mis la gravité de la propriété de mon EditText sur «centre_horizontal» ou «centre». Le même problème se produit lors de l'utilisation de textAlignment 'center'. Retirez-le et vous ne rencontrerez pas le problème du clavier cachant EditText la deuxième fois (et les suivants) lorsque le clavier est sorti.

    Le problème que vous rencontrez est maintenant un bug de plate-forme connu comme décrit ici: https://code.google.com/p/android/issues/detail?id=182191

    Le correctif n'est pas sauvegardé et ne prendra donc effet qu'après Android N. Jusqu'à ce que Android N soit votre SDK minimum, la solution suivante est une solution de contournement.

    Vous pouvez créer une classe personnalisée étendant EditText et remplacer la méthode onKeyPreIme (int keyCode, KeyEvent event) comme ceci:

     @Override public boolean onKeyPreIme(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK) { clearFocus(); } return super.onKeyPreIme(keyCode, event); } 

    Vous devez également veiller à ce qu'une mise en page de niveau supérieur puisse être concentrée afin que l'accent de EditText soit effacé avec succès. Les attributs suivants peuvent fonctionner pour vous:

     android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true" 

    Maintenant, lorsque la touche Retour est enfoncée, EditText perd la mise au point. Ensuite, lorsque vous appuyez à nouveau sur le bouton, le réglage va fonctionner comme prévu. (Publication comme réponse puisque l'édition a été refusée).

    Voici le code que j'avais à l'origine utilisé pour résoudre ce problème:

      <EditText android:layout_width="250dp" android:layout_height="wrap_content" android:gravity="center" /> 

    Lorsque j'ai retiré la ligne de gravité centrale du EditText, le panoramique a fonctionné:

     android:gravity="center" 

    J'ai travaillé autour d'elle en enveloppant EditText dans un FrameLayout et en centrant tout EditText dans FrameLayout. La seule question qu'il cause, c'est que EditText sera au moins la largeur du texte d'index, de sorte que les premiers caractères / mots tapés ne seront pas centrés. C'était bien pour moi mais votre kilométrage peut varier 🙂

     <FrameLayout android:layout_width="250dp" android:layout_height="wrap_content"> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" /> </FrameLayout> 

    EDIT: cette solution contourne si l'utilisateur clique sur le dernier mot dans edittext. J'utilise maintenant la solution de contournement onKeyPreIme

    Pour moi, onKeyPreIme ne fonctionne pas. Donc, je dépasse dispatchKeyEventPreIme place.

     @Override public boolean dispatchKeyEventPreIme(KeyEvent event) { if(event.getKeyCode() == KeyEvent.KEYCODE_BACK){ clearFocus(); } return super.dispatchKeyEventPreIme(event); } 

    Dans EditText android:layout_gravity="center" Créez ce type de problème. Si vous souhaitez que le texte devienne au centre, vous pouvez faire de cette façon

    Étape 1: pour la mise en page

      <LinearLayout android:id="@+id/linerPassword" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_toRightOf="@+id/imageView2" android:gravity="center"> <EditText android:id="@+id/editText2" android:layout_width="wrap_content" android:layout_height="40dp" android:background="@null" android:hint="*****" android:layout_marginLeft="-40dp" android:paddingLeft="10dp" android:paddingRight="10dp" android:inputType="textPassword" android:textColor="@color/white" android:textColorHint="@color/white" android:textSize="18sp" /> </LinearLayout> 

    Étape 2: quelque chose par programme

      linerUser.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(mETUserName, 0); mETUserName.requestFocus(); } }); 

    Enfin, travaillez très bien. J'ai trouvé cette solution pour ajuster SoftKeyboard

    Habituellement, l'ajustement ne fonctionne pas après la première fois que nous appuyons sur le bouton arrière, essayons de le faire de la manière suivante: – (peut être implémenté pour EditText, AutoCompleteTextView ou toute autre vue dans laquelle les mauvaises ouvertures)

      @Override public void onBackPressed() { editText.clearFocus(); editText.setCursorVisible(false); } 

    Espoir Cela aide quelqu'un

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.