Domanda

Ho alcuni elementi in una RelativeView con il fondo allineamento attributo, quando la tastiera molle esce elementi sono nascosti dalla tastiera molle.

Vorrei loro di spostarsi verso l'alto in modo che se vi sia spazio sufficiente schermo sono mostrati sopra la tastiera, o per fare la sezione sopra la tastiera scorrevole così l'utente può ancora vedere gli elementi.

Tutte le idee su come affrontare questo?

È stato utile?

Soluzione

Si, controlla questo articolo sul sito sviluppatori di Android che descrive come il quadro gestisce la tastiera virtuale che appare.

L'attributo android:windowSoftInputMode può essere utilizzato per specificare cosa accade su una base per-attività:. Se il layout è ridimensionato o se si scorre etc

Altri suggerimenti

È inoltre possibile utilizzare questo codice nel metodo onCreate():

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

Aggiungi a AndroidManifest.xml per la vostra attività:

android:windowSoftInputMode="adjustPan|adjustResize"

Apportare modifiche dell'attività del file manifesto come

windowSoftInputMode="adjustResize"

o

Apportare modifiche nel metodo onCreate() nella classe di attività come

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

problema simile stavo affrontando con il mio layout che consistono vista scorrere all'interno. Ogni volta che cerco di selezionare il testo in EditText, Copia / Taglia / Incolla barra delle operazioni viene spostato con il codice qui sotto, come tale, non ridimensiona il layout

android:windowSoftInputMode="adjustPan"

Per modificandolo come sotto

1) AndroidManifest.xml

android:windowSoftInputMode="stateVisible|adjustResize"

2) il file style.xml, in stile attività

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

Ha funzionato. !!!!!!!!!!!!

In AndroidManifest.xml, non dimenticate di impostare:

 android:windowSoftInputMode="adjustResize"

e per RelativeLayout all'interno ScrollView, impostare:

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

sarà a posto

per la loro attività nel suo inserto OnCreate Methode sotto la linea

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

e frammenti nel suo metodo onCreate

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

Ci sono 3 passi da seguire per scorrere schermo verso l'alto.

  1. Scrivi nel file manifesto per la vostra attività:
  

Android: windowSoftInputMode = "adjustResize"

  1. Aggiungi la seguente linea nel OnCreate () della vostra attività
  

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

  1. Poi mettete tutta la vostra vista in "Scrollview" nel file XML come:
<?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. Non dimenticate di aggiungere Android:. Layout_gravity = "center" nel genitore disposizione relativa

Ho provato un metodo di Diego Ramírez, funziona. In AndroidManifest:

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

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

Ho trovato una soluzione ai miei problemi che è abbastanza uguali ai suoi.

Prima di tutto, ho solo un LinearLayout con 2 elementi, un ImageView e un wich LinearLayout contiene 2 EditText ed un tasto, quindi ho bisogno di tenerli separati a schermo intero senza tastiera, e quando appare la tastiera che dovrebbe apparire più vicino.

Così ho aggiunto la vista tra di loro con l'attributo altezza in 0DP e peso 1, che mi permetta di mantenere il mio viste separate una forma a vicenda. e quando la tastiera appers, in quanto non hanno un'altezza fissa, semplicemente ridimensionare e mantenere l'aspetto.

Voila! Il ridimensionamento di layout e la distanza tra le mie opinioni è lo stesso quando la tastiera è o non è presente.

Qui è pieno di codice manifesto

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

se siete in frammenti poi si deve aggiungere il codice qui sotto al tuo onCreate sulla vostra attività Risolve problema per me

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

Nel file manifest aggiungere la riga in basso. Si lavorerà

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

Bene questo è molto tardi ma ho scoperto che se si aggiunge un elenco Vista sotto la modifica del testo, allora la tastiera si sposterà tutti i layout in forza di tale EditText senza spostare il 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**

Questa è l'unica soluzione che ha funzionato per me.

entrare descrizione dell'immagine qui

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

Ho appena aggiunto la seguente linea al layout di alto livello e tutto ha funzionato:

android:fitsSystemWindows="true"
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top