110 votes

Défilement des pages lorsque le clavier souple apparaît

J'ai un <ScrollView> disposition :

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/my_scrollview"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <EditText
            android:id="@+id/input_one"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:inputType="number" >

         <EditText
            android:id="@+id/input_two"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:inputType="number" >

         <EditText
            android:id="@+id/input_three"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:inputType="number" >

          <Button
            android:id="@+id/ok_btn"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginTop="20dp"
            android:text="@string/ok_str" />

      </LinearLayout>
</ScrollView>

Comme vous le voyez ci-dessus, la présentation simple consiste en trois champs de saisie et un bouton "Ok".

J'exécute mon application avec la présentation ci-dessus, lorsque je tape sur le premier champ de saisie ( @+id/input_one ), le clavier virtuel apparaît en bas de l'écran. cache le 3ème champ de saisie et le bouton "Ok".

Puisque j'utilise <ScrollView> J'ai pensé que je pouvais faire défiler la page vers le haut afin de voir le troisième champ de saisie et le bouton "Ok" qui sont caché par le clavier souple, mais la page n'est pas défilable . Comment s'en débarrasser ? En fait, j'aimerais que tous les champs de saisie et le bouton "Ok" s'affichent, même sur le clavier souple.

136voto

Leem.fin Points 3841

J'ai résolu le problème en définissant l'attribut suivant dans <activity> de AndroidManifest.xml

android:windowSoftInputMode="adjustResize"

39voto

qweret Points 93

Ok, j'ai cherché plusieurs heures maintenant pour trouver le problème, et je l'ai trouvé.

Aucun des changements tels que fillViewport="true" o android:windowSoftInputMode="adjustResize" m'a aidé.

J'utilise Android 4.4 et c'est la grosse erreur :

android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"

D'une manière ou d'une autre, les thèmes Plein écran empêchent les ScrollViews de défiler lorsque le clavier logiciel est visible.

Pour l'instant, j'ai fini par utiliser ceci à la place :

android:theme="@android:style/Theme.Black.NoTitleBar

Je ne sais pas comment me débarrasser de la barre système supérieure avec l'affichage de l'heure et de la batterie, mais au moins j'ai résolu le problème.

J'espère que cela aidera ceux qui ont le même problème.

EDIT : J'ai trouvé une petite solution pour mon cas, et je l'ai donc publiée. aquí :

Je ne sais pas si cela vous conviendra, mais cela vous aidera certainement à comprendre et à clarifier certaines choses.

EDIT2 : Aquí est un autre bon sujet qui vous aidera à aller dans la bonne direction ou même à résoudre votre problème.

20voto

Pour moi, la seule chose qui fonctionne est de mettre cet attribut dans l'activité dans le manifeste :

android:windowSoftInputMode="stateHidden|adjustPan"

Ne pas afficher le clavier lors de l'ouverture de l'activité et ne pas recouvrir le bas de la vue.

14voto

user3594530 Points 17

Placez ceci à l'intérieur de votre Manifeste comme ceci en mode sans plein écran

android:windowSoftInputMode="stateVisible|adjustPan" 

dans votre manifeste

<activity
    android:windowSoftInputMode="stateVisible|adjustPan"
    android:name="com.example.patronusgps.MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

11voto

MoshErsan Points 5119

Dans votre Manifest définir windowSoftInputMode propriété :

<activity android:name=".MyActivity"
          android:windowSoftInputMode="adjustNothing">

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X