web-dev-qa-db-fra.com

comment faire défiler une vue Android lorsque le clavier apparaît?

J'ai une vue avec quelques champs (nom, email, mot de passe, bouton d'enregistrement):

<ScrollView
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent" >

    <ViewFlipper
        Android:id="@+id/viewflipper"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content" >

        //Layouts

    </ViewFlipper>

</ScrollView>

Lorsque je focalise un champ edittext, le clavier apparaît et recouvre les champs inférieurs de la vue. Donc, je ne peux pas les voir quand le clavier est présent. Je voudrais savoir comment faire défiler la vue pour que je puisse voir les champs inférieurs. Et de plus, comment faire défiler automatiquement la vue pour rendre le champ ciblé visible.

15
Alexis

Vous devez inclure l'attribut Android:windowSoftInputMode="adjustResize" pour votre activité dans le fichier AndroidManifest.xml. Ensuite, Android doit redimensionner automatiquement pour vous:

<activity Android:name="..."
          ...
          Android:windowSoftInputMode="adjustResize">
    ...
/>
40
Aleks G

J'ai créé un fichier XML simple, j'espère que c'est ce que vous recherchez.

étape 1 . vous pouvez faire défiler quand le clavier est apparu.

étape 2 . Lorsque vous cliquez sur le champ de texte, il apparaît sur le clavier Focus/au-dessus.

<ScrollView Android:id="@+id/ScrollView01"
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:fillViewport="true" 
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<LinearLayout 
    Android:orientation="vertical"
    Android:layout_width="fill_parent" 
    Android:weightSum="1.0" 
    Android:layout_height="match_parent"
    Android:focusable="true"
    Android:focusableInTouchMode="true" 
    Android:id="@+id/l_layout">
    <EditText 
        Android:layout_height="wrap_content" 
        Android:layout_width="match_parent" 
        Android:id="@+id/editText1" 
        Android:layout_marginTop="100dp">
        <requestFocus></requestFocus>
    </EditText>
    <EditText 
        Android:layout_height="wrap_content" 
        Android:layout_width="match_parent" 
        Android:id="@+id/editText2" 
        Android:layout_marginTop="100dp">
        </EditText>
    </LinearLayout> 
</ScrollView>
6
swiftBoy

Dans mon cas, la solution @Aleks G ne fonctionnait pas. donc j'ai résolu mon problème avec 

<RelativeLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    >

<ScrollView
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:id="@+id/registration_scroll_view"
    Android:layout_alignParentTop="true"
    Android:layout_above="@+id/btn_register_submit"
    >

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:gravity="center"
        Android:orientation="vertical">

       <!--This comment will be replaced 
           by your focusable views-->

    </LinearLayout>
</ScrollView>

<Button
    Android:id="@+id/btn_register_submit"
    Android:layout_width="match_parent"
    Android:layout_height="50dp"
    Android:layout_alignParentBottom="true"
    Android:background="@drawable/form_action_button_green"
    Android:gravity="center"
    Android:text="@string/submit"
    />

</RelativeLayout>
0
Sandeep Sharma

Avez-vous essayé ceci:

<ScrollView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent" >

<ViewFlipper
    Android:id="@+id/viewflipper"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content" >
    <ScrollView 
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent"
        Android:id="@+id/scroll_container">
        //Layouts
    </ScrollView>


</ViewFlipper>

0
Rafael T