J'essaie de créer un écran de discussion assez basique avec un ListView affichant le texte et un EditText en bas et un bouton "Envoyer" à droite de EditText. Tout est fonctionnel, mais quand je clique sur EditText, le clavier virtuel le couvre. L'écran se déplace un peu mais pas assez pour devenir visible au-dessus du clavier. J'ai la balise "adjustPan" dans mon manifeste et j'ai également essayé la balise "adjustResize" en vain. Je suppose que cela a quelque chose à voir avec la façon dont ma mise en page est configurée, mais je n'ai honnêtement aucune idée. Aidez-moi!
Disposition actuelle ...
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<ListView Android:id="@+id/Android:list"
Android:layout_height="0dip"
Android:layout_width="fill_parent"
Android:layout_weight="1"
Android:stackFromBottom="true">
</ListView>
<LinearLayout Android:orientation="horizontal"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content">
<EditText Android:id="@+id/sendMessageBox"
Android:focusable="true"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:scrollbars="vertical"
Android:maxLines="4"
Android:text=""
Android:inputType="textShortMessage|textAutoCorrect|textCapSentences|textMultiLine"
Android:maxLength="1000"
Android:hint="Type your message..."
Android:imeOptions="actionSend"/>
<Button Android:id="@+id/sendMessageButton"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="bottom"
Android:text="Send"/>
</LinearLayout>
Après avoir fait beaucoup de recherches, c'est ce que j'appelle un bug. Si vous utilisez la balise plein écran (pour supprimer la barre d'état de l'activité), vous ne pouvez pas utiliser "adjustResize" sans encapsuler l'activité dans un ScrollView. Malheureusement pour moi, j'utilise un ListView qui créerait encore un autre problème. J'en ai marre de jouer avec et j'abandonnerai probablement le plein écran sur cette activité.
Dans votre fichier manifeste, vous devez définir la propriété Android:windowSoftInputMode
Appropriée. Cet attribut est valide depuis l'API 3.
<activity
...
Android:windowSoftInputMode="adjustPan" >
</activity>
Les options sont: http://developer.Android.com/guide/topics/manifest/activity-element.html#wsoft
si vous définissez Android:windowSoftInputMode="adjustResize"
pour une activité dans le manifeste, puis un ScrollView (ou d'autres ViewGroups repliables) se rétrécira pour accueillir le clavier virtuel. Mais si vous définissez Android:windowFullscreen="true"
dans le thème de l'activité, le ScrollView ne diminuera pas car il est forcé de remplir tout l'écran. Cependant, la définition de Android:fitsSystemWindows="false"
dans votre thème empêche également adjustResize de fonctionner
Je l'avais dans mon AndroidManifest. Cela a causé le adjustPan
de cesser de fonctionner correctement. J'ai supprimé le bloc ci-dessous et tout fonctionne à nouveau correctement.
<supports-screens
Android:smallScreens="true"
Android:normalScreens="true"
Android:largeScreens="true"
Android:xlargeScreens="false"
Android:anyDensity="false" />
Voici une solution de contournement que j'ai trouvée. Ouvrez le editText problématique et appuyez sur la touche RETOUR. Notez qu'il déplace le editText plus près de la position pour laquelle vous photographiez.
Donc, bien que hacky, vous pouvez essentiellement plaire à une nouvelle ligne en haut de l'edittext.
Cela semble également fonctionner en utilisant une nouvelle ligne en bas, mais vous devrez utiliser un délai pour ne pas ajouter la nouvelle ligne jusqu'à ce qu'APRÈS que le clavier virtuel se soit animé en position.
Remarque Je n'ai ce problème que sur certains téléphones (DroidX).
if (Android.os.Build.MODEL.equals("DROIDX")) {
inputEt.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
String text = inputEt.getText().toString();
text = "\n\n" + text.trim();
inputEt.setText(text);
inputEt.setSelection(text.length());
}
});
}