5
votes

Pourquoi ma mise en page ne monte-t-elle pas suffisamment avec "AdjustPan"?

J'ai rencontré des problèmes lors de l'utilisation de AdjustPan dans mon application, car il ne fonctionne pas comme il est censé le faire. Certains autres utilisateurs ont également rencontré ce problème, donc je pense qu'il est important de partager ce problème ( La mise en page ne monte pas suffisamment lorsque vous cliquez sur Modifier le texte ).

Remarque: j'utilise Android Studio et j'utilise une "application instantanée", donc l'emplacement des fichiers sera un peu différent.

Lorsque j'utilise AdjustPan dans ma mise en page, mon activité ne monte pas suffisamment au point où le EditText apparaît au-dessus du clavier virtuel (voir l'image pour Détails). Le même résultat apparaît toujours, que vous l'utilisiez dans un fichier Manifest ou un fichier Java.

Non seulement cela, mais la partie la plus étrange est que la barre d'état devient transparente et la barre bleu foncé qui est censée aller derrière les icônes de notification descend vers le bas strong > un peu (voir l'image pour plus de détails).

 Screenshot of issue

J'ai essayé plusieurs tentatives pour résoudre ce problème, comme en utilisant AdjustResize et setOnTouchListener mais ces deux réponses que j'ai reçues n'ont pas résolu ce problème.

Je n'arrive toujours pas à comprendre la cause de ce problème, donc toute réponse ou tout commentaire sur la façon de découvrir pourquoi ce problème se produit est également très bien.

Voici une partie de mon code:

Fichier manifeste:

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"

android:layout_height="match_parent"
tools:context=".Input_Activity">

<EditText
    android:layout_width="214dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginBottom="8dp"
    android:inputType="number|numberDecimal"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.585"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.725" />

Fichier Java:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.WindowManager;

public class Input_Activity extends AppCompatActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_input__activity);

    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
   }
}

Fichier XML:

<activity
        android:name=".Input_Activity"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="adjustPan" />

Tous les commentaires seraient appréciés.


0 commentaires

4 Réponses :


0
votes

Vous devez également ajouter le code suivant dans votre événement onTouch afin que lorsque le clavier virtuel apparaît, il augmente. Exemple:

 editText.setTransformationMethod(WordBreakUtil.getInstance());
 editText.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
            return false;
        }
    });


1 commentaires

Android Studio (Mon IDE) déclare que: "Il ne peut pas résoudre le symbole WordBreakUtil "



3
votes

créer un objet comme InputMethodManager methodManager au niveau de la classe.
ajoutez ces lignes à votre méthode onCreate () ,

methodManager.toggleSoftInputFromWindow(
    your_view_name.getApplicationWindowToken(),
    InputMethodManager.SHOW_FORCED, 0);  

et dans votre méthode onClick (), affichez le clavier comme,

methodManager = (InputMethodManager) this.getSystemService(this.INPUT_METHOD_SERVICE);
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);


2 commentaires

Je suis un peu nouveau dans Android Studio, ce qui est censé continuer: your_view_name


Même si ce n'est pas AdjustPan , cela fonctionne toujours dans l'ensemble. Ce serait formidable si vous pouviez résoudre ce problème avec AdjustPan



0
votes

Je ne suis pas sûr de la réponse. mais essayez de remplacer

<activity
    android:name=".Input_Activity"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="adjustResize" />

par

<activity
    android:name=".Input_Activity"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="adjustPan" />

dans votre manifeste Android. Lisez ici

J'espère que cela vous aidera!


0 commentaires

0
votes
android:windowSoftInputMode
Above attribute can be used to specify what happens with activity contents.Below image can clear your doubts more 
adjustPan: The activity’s main window is not resized to make room for
the soft keyboard. Rather, the contents of the window are
automatically panned so that the current focus is never obscured by
the keyboard and users can always see what they are typing. This is
generally less desirable than resizing, because the user may need to
close the soft keyboard to get at and interact with obscured parts of
the window.
adjustResize: The activity’s main window is always resized to make
room for the soft keyboard on screen.
I think there is no need add below code which you have added.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

0 commentaires