web-dev-qa-db-fra.com

Défilement de page lorsque le clavier virtuel est apparu

J'ai une disposition <ScrollView>:

<?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 mise en page simple est composée de trois champs de saisie et d'un bouton "Ok".

Je lance mon application avec la disposition ci-dessus. Lorsque je tape sur le premier champ de saisie (@+id/input_one), le clavier virtuel apparaît au bas de l'écran, il masque le troisième champ de saisie et le bouton "OK" . 

Depuis que j’utilise <ScrollView>, j’ai pensé que je pouvais faire défiler la page vers le haut pour voir le troisième champ de saisie et le bouton "Ok" qui sont cachés par le clavier logiciel, mais la page ne peut pas défiler . Pourquoi? Comment s'en débarrasser? En gros, je voudrais voir tous les champs de saisie et le bouton "Ok", même le clavier logiciel apparaît.

78
Leem.fin

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

Android:windowSoftInputMode="stateVisible|adjustResize"
102
Leem.fin

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

Aucune des modifications comme fillViewport="true" ou Android:windowSoftInputMode="adjustResize" ne m'a aidé.

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

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

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

Pour le moment, 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 le problème.

J'espère que cela aide les autres qui ont le même problème.

EDIT: J'ai un peu de solution de contournement pour mon cas, alors je l'ai posté ici :

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

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

34
qweret

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

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.

dans votre propriété Manifest define windowSoftInputMode<activity Android:name=".MyActivity" Android:windowSoftInputMode="adjustNothing">

10
Mohammad Ersan

mettez ceci à l'intérieur de votre manifeste comme ceci en mode 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>
9
user3594530

Ajouter la ligne de code ci-dessous dans le fichier manifeste Android sous le tag d'activité

Android:windowSoftInputMode="adjustResize"
6
Bilal Ahmad

regarde ça.

<activity Android:name=".Calculator" Android:windowSoftInputMode="stateHidden|adjustResize" Android:theme="@Android:style/Theme.Black.NoTitleBar"></activity>
3
Ravi1187342

Cela n'a fonctionné que pour moi:

Android:windowSoftInputMode="adjustPan"
2
blueware

Vous pouvez essayer d'utiliser le code suivant pour résoudre votre problème:

 <activity
     Android:name=".DonateNow"
     Android:label="@string/title_activity_donate_now"
     Android:screenOrientation="portrait"
     Android:theme="@style/AppTheme"
     Android:windowSoftInputMode="stateVisible|adjustPan">
 </activity>

De même, si vous souhaitez le faire par programme, ajoutez simplement la ligne ci-dessous à la création de l'activité.

getWindow().setSoftInputMode(
            WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | 
            WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE );
0
ucMedia