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.
J'ai résolu mon problème en définissant l'attribut suivant dans <activity>
de AndroidManifest.xml
Android:windowSoftInputMode="stateVisible|adjustResize"
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.
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">
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>
Ajouter la ligne de code ci-dessous dans le fichier manifeste Android sous le tag d'activité
Android:windowSoftInputMode="adjustResize"
regarde ça.
<activity Android:name=".Calculator" Android:windowSoftInputMode="stateHidden|adjustResize" Android:theme="@Android:style/Theme.Black.NoTitleBar"></activity>
Cela n'a fonctionné que pour moi:
Android:windowSoftInputMode="adjustPan"
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 );