Déplacer la disposition vers le haut quand le clavier doux est montré?

j'ai quelques éléments dans une RelativeView avec l'attribut align bottom défini, quand le clavier doux monte, les éléments sont cachés par le clavier doux.

je voudrais qu'ils se déplacent vers le haut de sorte que s'il y a assez d'espace d'écran ils sont affichés au-dessus du clavier, ou de faire la section au-dessus du clavier scrollable de sorte que l'utilisateur peut encore voir les éléments.

des idées sur la façon d'aborder cela?

95
demandé sur Rahul Tiwari 2009-12-27 03:40:30

13 réponses

Oui, découvrez cet article sur l'Android site des développeurs qui décrit comment le framework gère le clavier apparaissent.

l'attribut android:windowSoftInputMode peut être utilisé pour spécifier ce qui se passe par activité: si la mise en page est redimensionnée ou si elle défile, etc.

73
répondu Christopher Orr 2012-11-15 16:06:45

vous pouvez également utiliser ce code dans onCreate() méthode:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
62
répondu Bobs 2013-02-25 09:13:17

ajouter dans AndroidManifest.xml pour votre activité:

android:windowSoftInputMode="adjustPan|adjustResize"
27
répondu Serhii Bohutskyi 2013-10-16 15:00:57

modifiez l'activité de votre fichier manifeste comme

windowSoftInputMode="adjustResize"

ou

apporter des changements à votre méthode onCreate() dans la classe d'activité comme

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
18
répondu Jose Kurian 2014-05-18 01:02:41

question similaire à laquelle je faisais face avec ma mise en page qui consiste scroll view à l'intérieur. Chaque fois que j'essaie de sélectionner le texte dans EditText, la barre D'action Copier/Couper/Coller est déplacée vers le haut avec le code ci-dessous en tant que tel il ne redimensionne pas layout

android:windowSoftInputMode="adjustPan"

en le modifiant comme suit:

1) AndroidManifest.xml

android:windowSoftInputMode="stateVisible|adjustResize"

2) style.fichier xml ,en style d'activité

<item name="android:windowActionBarOverlay">true</item>

ça a marché.!!!!!!!!!!!!

13
répondu Ronak Poriya 2015-07-31 10:28:07

Dans AndroidManifest.xml, n'oubliez pas de définir:

 android:windowSoftInputMode="adjustResize"

et pour une sortie relative à l'intérieur de ScrollView ,définir:

 android:layout_gravity="center" or android:layout_gravity="bottom" 

ça va aller

8
répondu Zahra.HY 2016-06-29 08:05:47

pour L'activité dans sa méthode oncrée, insérer

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

et pour les fragments dans sa méthode oncrée

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
5
répondu Rahul_Pawar 2016-03-10 10:58:01

il y a 3 étapes à suivre pour faire défiler l'écran vers le haut.

  1. écrivez en fichier manifeste pour votre activité:

android: windowSoftInputMode= "adjustResize"

  1. ajouter la ligne suivante dans oncreate() méthode de votre activité

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

  1. alors placez toute votre vue dans "Scrollview" dans le fichier XML comme:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:background="@drawable/bg"
    android:layout_height="match_parent" 
    > 
    <RelativeLayout
         android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center" >
        <TextView />
         .........
        <TextView />
        <EditText >
            <requestFocus />
        </EditText>
        <Button />
    </RelativeLayout>
 </ScrollView>

P.S. N'oubliez pas d'ajouter android:layout_gravity="center" dans layout relatif parent.

5
répondu Heena Arora 2018-02-14 12:01:20

j'ai essayé une méthode de Diego Ramírez, ça marche. En AndroidManifest:

    <activity
        android:name=".MainActivity"
        android:windowSoftInputMode="stateHidden|adjustResize">
        ...
    </activity>

Dans activity_main.xml:

<LinearLayout ...
    android:orientation="vertical">

<Space
    android:layout_width="wrap_content"
    android:layout_height="0dp"
    android:layout_weight="1" />

<EditText
    android:id="@+id/edName"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:hint="@string/first_name"
    android:inputType="textPersonName" />

<EditText ...>
...
</LinearLayout>
4
répondu CoolMind 2015-08-13 17:21:27

j'ai trouvé une solution à mes problèmes qui est assez semblable à la vôtre.

tout d'abord, je n'ai qu'un affichage en ligne avec 2 éléments, une vue D'image et un affichage en ligne qui contient 2 EditText et un bouton, donc j'avais besoin de les garder séparés en plein écran sans clavier, et quand le clavier apparaît, ils devraient regarder de plus près.

donc j'ai ajouté la vue entre eux avec l'attribut de taille dans 0dp et le poids 1, qui me permettent de garder mon points de vue distincts l'un de l'autre. et quand le clavier apparaît, comme ils n'ont pas de hauteur fixe, ils se contentent de redimensionner et de garder l'aspect.

voilà! La mise en page redimensionne et la distance entre mes vues est la même lorsque le clavier est présent ou non.

3
répondu Diego Ramírez 2014-12-10 22:05:43

voici le code de manifeste complet

<activity
        android:name=".activities.MainActivity"
        android:windowSoftInputMode="adjustResize"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
1
répondu Dantalian 2015-07-31 06:25:29

si vous êtes en fragments alors vous devez ajouter le code ci-dessous à votre onCreate sur votre activité il résout question pour moi

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
0
répondu Pratik Mohanrao Gondil 2017-09-26 13:27:58

très bien c'est très tard mais j'ai découvert que si vous ajoutez une vue Liste sous votre texte d'édition, alors le clavier déplacera toutes les mises en page sous ce texte d'édition sans déplacer le ListView

<EditText
android:id="@+id/et"
android:layout_height="match_parent"
android:layout_width="match_parent"



/>

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"//can make as 1dp
    android:layout_below="@+id/et" // set to below editext
    android:id="@+id/view"
    >
**<any layout**

C'est la seule solution qui a fonctionné pour moi.

0
répondu Omar Ahmed 2018-07-01 01:44:14