Android adjustpan pas de travail après la première fois
Mon problème: à partir de la deuxième fois que le logiciel clavier est affiché sur l'écran, il cache entièrement mon EditText.
Attribut android:windowSoftInputMode="adjustPan" a été spécifié dans le AndroidManifest.xml, mais il ne fonctionne que la première fois.
J'ai le schéma suivant:
<?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>
La "showOrHide" bouton affiche/masque le "addListText"/"addTextListButton" combo.
Lorsque l'EditText est montré pour la première fois et je le touche, le clavier s'affiche sur l'écran et le "addListText"/"addTextListButton" combo est repositionnée correctement. Quand j'ai cacher le clavier et l'afficher à nouveau, le clavier couvre complètement mon addListText editbox!
Une idée sur ce qu'il se passe? Je suis en essais sur Android 4.2.2.
S'il vous plaît aider! Merci 🙂
edit: j'ai aussi essayé de mettre le premier LinearLayout à l'intérieur d'un ScrollView, mais il ne fonctionne pas!
Vous devez vous connecter pour publier un commentaire.
sous-classé EditText et remplacé la méthode onKeyPreIme(int keyCode, KeyEvent event) comme ceci:
Maintenant, quand la touche est pressée, l'EditText perdu le focus. Puis en tapant de nouveau adjustpan fonctionne.
android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true"
Cela peut sembler un peu idiot, mais j'ai rencontré ce problème lorsque j'ai mis la propriété de la gravité de mon EditText, soit pour "center_horizontal' ou 'centre'. Le même problème se produit lors de l'utilisation de textAlignment 'centre'. L'enlever et vous ne rencontrerez pas le problème du clavier cacher l'EditText la deuxième fois (et les suivantes) lorsque le clavier sort.
Le problème que vous rencontrez est maintenant connu plate-forme de bug comme décrit ici: https://code.google.com/p/android/issues/detail?id=182191
Le correctif n'est pas reporté et donc ne prendra pas effet jusqu'à ce que Android N. Jusqu'à ce que Android N est votre minimum SDK, la solution suivante est une solution de contournement.
Vous pouvez créer une classe personnalisée extension EditText et remplacer la méthode onKeyPreIme(int keyCode, KeyEvent event) comme ceci:
Vous devez vous assurer également un niveau plus élevé de mise en page a la capacité d'être concentré pour l'EditText l'accent peut être effacé avec succès. Les attributs suivants peuvent travailler pour vous:
Maintenant, quand la touche est pressée, l'EditText perd le focus. Ensuite, lorsque vous appuyez sur le bouton de nouveau, adjustpan fonctionnera comme prévu.
(L'affichage comme une réponse depuis le montage a été refusée.)
Voici le code que j'était à l'origine à l'aide de qui a couru dans ce problème:
Quand j'ai enlevé le centre de gravité de la ligne de l'EditText, le panoramique travaillé:
J'ai travaillé autour de en les enveloppant de l'EditText dans un FrameLayout et le centrage de l'ensemble de l'EditText dans le FrameLayout. Le seul problème qu'il provoque, c'est que l'EditText sera d'au moins la largeur de la hinttext, de sorte que les premiers caractères/mots tapés ne sera pas centré. Cela a été très bien pour moi, mais votre kilométrage peut varier 🙂
EDIT: cette solution de contournement des pauses si l'utilisateur clique sur le dernier mot dans l'edittext. Je suis maintenant à l'aide de la onKeyPreIme solution de contournement
Pour moi primordial
onKeyPreIme
ne fonctionne pas. J'ai donc remplacerdispatchKeyEventPreIme
à la place.Dans EditText
android:layout_gravity="center"
Créer ce type de problème. Si vous voulez le texte deviennent dans le centre, alors vous pouvez le faire de cette façonEtape 1: Pour La Mise En
etape 2: Quelque chose en programmant
Enfin fonctionnent très bien. J'ai trouvé cette solution pour régler softKeyboard
Généralement l'régler la molette ne fonctionne pas après la première fois quand on appuie sur le bouton de retour, essayez de le faire de la manière suivante:- (peut être mis en œuvre pour l'EditText, AutoCompleteTextView ou tout autre point de vue en ce qui dysfonctionne)
Espère que Cela aide quelqu'un
Après avoir Essayé de nombreuses solutions dans le fichier de Manifeste,
Je l'ai résolu en dessous,
adjustPan avec une Relative mise en page ne fonctionne pas,
Votre parent Disposition doit être LinearLayout
Espère cela permet de gagner du temps pour les gens.