Question

J'ai quelques éléments dans un RelativeView avec le fond align attribut défini, lorsque le clavier est doux les éléments sont cachés par le clavier virtuel.

Je les aime à se déplacer de façon à ce que s'il y a suffisamment d'espace à l'écran, ils sont présentés au-dessus du clavier, ou pour faire la section au-dessus du clavier scrollable afin que l'utilisateur peut voir encore les éléments.

Toutes les idées sur la façon d'aborder ce sujet?

Était-ce utile?

La solution

Oui, consultez cet article sur la le site des développeurs Android qui décrit comment le cadre gère le clavier virtuel qui apparaît.

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

Autres conseils

Vous pouvez également utiliser ce code dans la méthode de onCreate():

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

Ajoutez à AndroidManifest.xml pour votre activité:

android:windowSoftInputMode="adjustPan|adjustResize"

Faire des changements dans l'activité de votre fichier Manifest comme

windowSoftInputMode="adjustResize"

ou

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

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

problème similaire je faisais face à ma disposition qui consiste vue défiler à l'intérieur. Chaque fois que j'essaie de sélectionner du texte dans EditText, Copier / Couper / Coller barre d'action est déplacé avec le code ci-dessous en tant que tel, il ne redimensionne pas la mise en page

android:windowSoftInputMode="adjustPan"

en le modifiant comme ci-dessous

1) AndroidManifest.xml

android:windowSoftInputMode="stateVisible|adjustResize"

2) fichier style.xml, dans le style d'activité

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

Il a travaillé. !!!!!!!!!!!!

Dans AndroidManifest.xml, ne pas oublier de mettre:

 android:windowSoftInputMode="adjustResize"

et pour RelativeLayout intérieur ScrollView, ensemble:

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

il sera correct

pour l'activité dans son insert oncreate de Methode ci-dessous ligne

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

et de fragments dans sa méthode onCreate

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

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

  1. Ecrire dans le fichier manifeste pour votre activité:
  

android: windowSoftInputMode = "adjustResize"

  1. Ajoutez la ligne suivante dans la méthode OnCreate () de votre activité
  

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

  1. Ensuite, placez votre point de vue dans son ensemble "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. Ne pas oublier d'ajouter android:. Layout_gravity = "center" dans parent disposition relative

J'ai essayé une méthode de Diego Ramírez, cela fonctionne. En AndroidManifest:

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

En 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>

Je l'ai trouvé une solution à mes problèmes qu'il est assez même que le vôtre.

Tout d'abord, je ne dispose que d'un LinearLayout avec 2 éléments, un ImageView et un Wich LinearLayout contient 2 EditText et un bouton, donc je besoin de les garder séparés en plein écran, sans clavier, et lorsque le clavier apparaît qu'ils devraient regarder plus.

Alors j'ai ajouté la vue entre eux avec l'attribut hauteur 0DP et poids 1, qui me permettent de garder mes vues séparées une forme autre. et lorsque le clavier appers, car ils ne disposent pas d'une hauteur fixe, ils redimensionner et de garder l'aspect.

Voila! Le redimensionnement de la mise en page et la distance entre mes vues est le même lorsque le clavier est ou non présent.

Voici le code complet manifeste

<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>

si vous êtes en fragments, alors vous devez ajouter le code ci-dessous pour votre onCreate sur votre activité, il permet de résoudre problème pour moi

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

Dans votre fichier manifest ajoutez la ligne ci-dessous. Il fonctionne

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

Bon ce qui est très en retard mais j'ai découvert que si vous ajoutez une liste Afficher sous votre texte puis modifier le clavier se déplace toutes les dispositions en vertu de cette edittext 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**

Ceci est la seule solution qui a fonctionné pour moi.

Here is the solution for this fix
- android:windowSoftInputMode="adjustResize" in Manifest File
- Make a class "CommentKeyBoardFix.Java" and copy and paste the below code.

public class CommentKeyBoardFix
{
private View mChildOfContent;
private int usableHeightPrevious;
private FrameLayout.LayoutParams frameLayoutParams;
private Rect contentAreaOfWindowBounds = new Rect();

public CommentKeyBoardFix(Activity activity)
{
    FrameLayout content = activity.findViewById(android.R.id.content);
    mChildOfContent = content.getChildAt(0);
    mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(this::possiblyResizeChildOfContent);
    frameLayoutParams = (FrameLayout.LayoutParams) mChildOfContent.getLayoutParams();
}

private void possiblyResizeChildOfContent()
{
    int usableHeightNow = computeUsableHeight();
    if (usableHeightNow != usableHeightPrevious)
    {
        int heightDifference = 0;
        if (heightDifference > (usableHeightNow /4))
        {
            // keyboard probably just became visible
            frameLayoutParams.height = usableHeightNow - heightDifference;
        }
        else
        {
            // keyboard probably just became hidden
            frameLayoutParams.height = usableHeightNow;
        }
        mChildOfContent.layout(contentAreaOfWindowBounds.left, contentAreaOfWindowBounds.top, contentAreaOfWindowBounds.right, contentAreaOfWindowBounds.bottom);
        mChildOfContent.requestLayout();
        usableHeightPrevious = usableHeightNow;
    }
}

private int computeUsableHeight()
{
    mChildOfContent.getWindowVisibleDisplayFrame(contentAreaOfWindowBounds);
    return contentAreaOfWindowBounds.height();
}
}

And then call this class in your Activity or Fragment
setContentView(R.layout.your_comments_layout)
CommentKeyBoardFix(this) ---> For Kotlin
or
new CommentKeyBoardFix(this) ---> For Java

Je viens d'ajouter la ligne suivante à la disposition de haut niveau et tout a fonctionné:

android:fitsSystemWindows="true"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top