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.

7voto

Ravi1187342 Points 732

Vérifier ceci.

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

2voto

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>

2voto

blueware Points 2488

Cela n'a fonctionné que pour moi :

android:windowSoftInputMode="adjustPan"

2voto

ucMedia Points 1266

Si vous voulez le faire par programme il suffit d'ajouter la ligne ci-dessous à la fonction onCreate de l'activité.

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

0voto

Akash Gupta Points 11

La réponse la plus simple que j'ai essayée est de supprimer le code qui fait passer l'activité en plein écran. J'avais un code comme celui-ci qui était responsable de l'affichage en plein écran de mon activité :

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

    getWindow().setFlags(
        WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
        WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
    );
}

Je viens de supprimer mon code et cela fonctionne parfaitement bien, mais si vous voulez obtenir ce résultat avec le plein écran, vous devrez essayer d'autres méthodes.

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