Mon problème: à partir de la deuxième fois que le clavier du logiciel est affiché à l'écran, il cache entièrement mon EditText.
L'attribut Android: windowSoftInputMode = "adjustPan" a été spécifié dans le fichier AndroidManifest.xml, mais il ne fonctionne que la première fois.
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/masque le combo "addListText"/"addTextListButton".
Lorsque le texte d'édition est affiché pour la première fois et que je le touche, le clavier logiciel apparaît à l'écran et le combo "addListText"/"addTextListButton" est affiché correctement. Quand je cache le clavier et que je le montre à nouveau, le clavier couvre complètement ma boîte de saisie addListText!
Une idée sur ce qui se passe? Je le teste sur Android 4.2.2.
S'il vous plaît aider! Merci :-)
edit: J'ai également essayé de placer le premier LinearLayout dans un ScrollView mais cela ne fonctionne pas!
sous-classe EditText et substitué 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);
}
Désormais, lorsque vous appuyez sur la touche Précédent, l’EditText a perdu le focus. Ensuite, appuyez à nouveau sur ce bouton pour ajuster.
Cela peut sembler un peu ridicule, mais je me suis heurté à ce problème en réglant la densité de propriété de mon EditText sur 'center_horizontal' ou 'center'. Le même problème se produit lors de l'utilisation de textAlignment 'center'. Supprimez-le et vous ne rencontrerez pas le problème du clavier masquant l'EditText la deuxième fois (et les suivantes) lorsque le clavier sortira.
Le problème que vous rencontrez est maintenant un bogue de plate-forme connu, comme décrit ici: https://code.google.com/p/Android/issues/detail?id=182191
Le correctif n'est pas rétroporté et ne prendra donc effet qu'après Android N. Jusqu'à ce qu'Android N soit votre SDK minimum, la solution suivante constitue une solution de contournement.
Vous pouvez créer une classe personnalisée qui étend EditText et redéfinir la méthode onKeyPreIme (int keyCode, événement KeyEvent) comme suit:
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event)
{
if(keyCode == KeyEvent.KEYCODE_BACK)
{
clearFocus();
}
return super.onKeyPreIme(keyCode, event);
}
Vous devez également vous assurer qu'une mise en page de niveau supérieur a la capacité d'être focalisée afin que la focalisation de EditText puisse être effacée avec succès. Les attributs suivants peuvent fonctionner pour vous:
Android:descendantFocusability="beforeDescendants"
Android:focusableInTouchMode="true"
Désormais, lorsque vous appuyez sur la touche Précédent, l’EditText perd la focalisation. Ensuite, lorsque vous appuyez de nouveau sur le bouton, adjustpan fonctionnera comme prévu . (Publication en tant que réponse, la modification ayant été refusée.)
Voici le code que j'utilisais à l'origine qui a rencontré ce problème:
<EditText
Android:layout_width="250dp"
Android:layout_height="wrap_content"
Android:gravity="center" />
Lorsque j'ai supprimé la ligne de gravité centrale de EditText, le panoramique a fonctionné:
Android:gravity="center"
J'ai résolu le problème en encapsulant EditText dans un FrameLayout et en centrant l'intégralité de EditText dans FrameLayout. Le seul problème que cela cause est que EditText sera au moins la largeur du texte codé, donc 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 de contournement est rompue si l'utilisateur clique sur le dernier mot de l'edittext. J'utilise maintenant la solution de contournement onKeyPreIme
Pour moi, remplacer onKeyPreIme
ne fonctionne pas. Donc, je remplace dispatchKeyEventPreIme
à la place.
@Override
public boolean dispatchKeyEventPreIme(KeyEvent event) {
if(event.getKeyCode() == KeyEvent.KEYCODE_BACK){
clearFocus();
}
return super.dispatchKeyEventPreIme(event);
}
Après avoir essayé beaucoup de solutions dans le fichier manifeste,
Votre mise en page parent doit être LinearLayout
J'espère que cela fait gagner du temps aux gens.
Habituellement, le réglage panoramique ne fonctionne pas après la première utilisation du bouton Précédent. Essayez de procéder de la manière suivante: - (peut être implémenté pour EditText, AutoCompleteTextView ou toute autre vue dans laquelle se comporte mal)
@Override
public void onBackPressed() {
editText.clearFocus();
editText.setCursorVisible(false);
}
J'espère que ça aide quelqu'un
Dans EditText Android:layout_gravity="center"
Créez ce type de problème. Si vous voulez que le texte devienne au centre, vous pouvez le 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>
step2: 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, fonctionne très bien. J'ai trouvé cette solution pour ajuster softKeyboard