web-dev-qa-db-fra.com

Le clavier logiciel masque la moitié de EditText

J'ai une vue de liste et le dernier élément de la liste contient EditText:

<RelativeLayout
    Android:id="@+id/contentLayout"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_alignParentLeft="true"
    Android:layout_alignParentRight="true"
    Android:layout_alignParentTop="true"
    Android:layout_marginLeft="10dp"
    Android:layout_marginRight="10dp"
    Android:layout_marginTop="30dp"
    Android:orientation="vertical" >

    <ImageView
        Android:id="@+id/test"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignRight="@+id/messageEditText"
        Android:layout_below="@+id/messageEditText"
        Android:layout_marginRight="14dp"
        Android:src="@drawable/test" />

    <EditText
        Android:id="@+id/messageEditText"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentLeft="true"
        Android:layout_alignParentTop="true"
        Android:layout_toLeftOf="@+id/sendImageButton"
        Android:ems="10"
        Android:gravity="top"
        Android:hint="@string/messageEditText"
        Android:inputType="textMultiLine"
        Android:minHeight="55dp"
        Android:paddingLeft="10dp"
        Android:paddingRight="10dp"
        Android:paddingTop="10dp" />

    <ImageButton
        Android:id="@+id/sendImageButton"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignBottom="@id/messageEditText"
        Android:layout_alignParentRight="true"
        Android:layout_alignTop="@id/messageEditText"
        Android:adjustViewBounds="true"
        Android:maxHeight="55dp"
        Android:maxWidth="55dp"
        Android:padding="12dp"
        Android:scaleType="centerInside"
        Android:src="@drawable/sendmessage" />

</RelativeLayout>

La moitié du EditText est masquée. Je ne peux pas non plus faire défiler la liste. Toute solution?

image

23
Gintas_

La solution consistait à définir un Android:softInputMode attribut à adjustResize dans le manifeste et placez la disposition (pas la liste des éléments) dans un ScrollView.

32
Gintas_

J'ai eu un problème similaire, alors j'ai utilisé Android:windowSoftInputMode="adjustResize|stateHidden" comme mentionné ici .. Cela fonctionne très bien pour moi ..

9
sham.y

Depuis mes débuts en tant que développeur Android, j'ai eu du mal avec le clavier virtuel. Je suis étonné que Android ne donne toujours pas de solution élégante et claire pour cela.

Voici donc la solution de contournement qui mettra ce gâchis derrière vous. cela fonctionnera sans la solution de contournement ScrollView ou sans afficher votre indicateur plein écran.

  1. Ajoutez cette géniale bibliothèque à votre fichier Gradle:

compile'net.yslibrary.keyboardvisibilityevent: keyboardvisibilityevent: 1.0.1 '

  1. Assurez-vous que votre activité possède les paramètres de clavier suivants:

Android: windowSoftInputMode = "adjustResize"

  1. envelopper votre EditText avec un LinearLayout vertical et ajouter une vue avec une visibilité du passé:

    <com.ylimitapp.ylimitadmin.views.NormalFontEditText
        Android:id="@+id/input_et"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:inputType="textCapSentences|textMultiLine"
        Android:imeOptions="actionSend"
        Android:paddingStart="20dp"
        Android:paddingEnd="40dp"
        Android:paddingTop="10dp"
        Android:maxHeight="120dp"
        Android:adjustViewBounds= "true"
        Android:scrollHorizontally="false"
        Android:textColorHint="#7b7b7b"
        Android:hint="@string/type_your_message"
        Android:background="@drawable/msg_inputfield_bg"
        Android:textColor="@color/black_text_color"
        Android:textSize="15.33sp"
        />
    
        <View
            Android:id="@+id/keyboard_view"
            Android:layout_width="match_parent"
            Android:layout_height="20dp"
            Android:visibility="gone"
            />
    
    </LinearLayout>
    
  2. calculer la taille de l'écran pour pouvoir calculer la hauteur de la vue qui pousse le EditText:

    private void storeScreenHeightForKeyboardHeightCalculations() {
                Rect r = new Rect();
                View rootview = getActivity().getWindow().getDecorView(); 
                rootview.getWindowVisibleDisplayFrame(r);
                mOriginalScreenHeight = r.height();
    
                Rect rectangle = new Rect();
                Window window = getActivity().getWindow();
                window.getDecorView().getWindowVisibleDisplayFrame(rectangle);
                int statusBarHeight = rectangle.top;
                int contentViewTop =
                        window.findViewById(Window.ID_Android_CONTENT).getTop();
                int titleBarHeight= contentViewTop - statusBarHeight;
    
                if (titleBarHeight == 0) {
                    mOriginalScreenHeight -= (24 * Utils.getDensity(getContext()));
                }
            }
    
    1. Ajoutez un écouteur pour les événements d'ouverture et de fermeture du clavier, puis définissez la hauteur de la vue sous EditText lors de l'exécution afin que nous définissions la hauteur correctement sur n'importe quel appareil et claviers personnalisés. puis rendez-le simplement visible lorsque le clavier est ouvert:
private void addkeyBoardlistener() {
           KeyboardVisibilityEvent.setEventListener(
                            getActivity(),
                            new KeyboardVisibilityEventListener() {
                                @Override
                                public void onVisibilityChanged(boolean isOpen) {
                                    if (isOpen) {
                                        Rect r = new Rect();
                                        View rootview = getActivity().getWindow().getDecorView(); // this = activity
                                        rootview.getWindowVisibleDisplayFrame(r);
                                        int keyboardHeight = (mOriginalScreenHeight - r.height());
                                        LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) keyboard_view.getLayoutParams();
                                        params.height = (int) ((keyboardHeight + 5 * Utils.getDensity(getContext())));
                                        keyboard_view.setLayoutParams(params);
                                        keyboard_view.setVisibility(View.VISIBLE);
                                    } else {
                                        keyboard_view.setVisibility(View.GONE);
                                    }
                                }
                            });
                }

Voici le résultat:

Result:

3
Gal Rom

Désactiver le clavier au démarrage de la fenêtre

this .getWindow().setSoftInputMode(WindowManager.LayoutParams. SOFT_INPUT_STATE_ALWAYS_HIDDEN );
2
it's me

Définissez un Android:softInputMode attribut pour votre élément Activity dans votre Manifest.

Voir documentation du manifeste pour une liste complète des valeurs valides et leur effet. Ceux qui vous intéressent particulièrement seront probablement adjustPan et adjustResize.

1
Bryan Herbst