Pregunta

Tengo un par de elementos en un RelativeView con la parte inferior align conjunto de atributos, cuando el teclado en pantalla aparece los elementos están ocultos por el teclado en pantalla.

Me gustaría que se muevan de manera que si hay suficiente espacio en la pantalla que se muestran por encima del teclado, o para hacer la parte superior del teclado desplegable para que el usuario todavía se pueden ver los elementos.

Cualquier ideas sobre cómo abordar esto?

¿Fue útil?

Solución

Sí, echa un vistazo a este artículo sobre la sitio de desarrolladores de Android, que describe cómo el marco maneja el teclado en pantalla que aparece.

El atributo android:windowSoftInputMode se puede utilizar para especificar qué debe hacerse sobre una base per-actividad:. Si el diseño se cambia el tamaño o si se desplaza etc.

Otros consejos

También puede utilizar este código en el método onCreate():

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

Añadir en AndroidManifest.xml para su actividad:

android:windowSoftInputMode="adjustPan|adjustResize"

Hacer cambios en la actividad de su archivo de manifiesto como

windowSoftInputMode="adjustResize"

o

Haga cambios en su método onCreate() en la clase de actividad como

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

problema similar me enfrentaba con mi diseño que consisten en vista de desplazarse en el interior. Siempre que intente seleccionar texto en EditarTexto, copiar / cortar / pegar barra de acción se mueve hacia arriba con la de abajo código, como tal, no cambia el tamaño de diseño

android:windowSoftInputMode="adjustPan"

Mediante la modificación a la siguiente

1) AndroidManifest.xml

android:windowSoftInputMode="stateVisible|adjustResize"

2) Archivo style.xml, en el estilo de la actividad

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

Se trabajó. !!!!!!!!!!!!

En AndroidManifest.xml, no se olvide de establecer:

 android:windowSoftInputMode="adjustResize"

y para RelativeLayout dentro ScrollView, sistema:

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

que va a estar bien

para la actividad en su inserción méthode alcrear debajo de la línea

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

y para los fragmentos en su método onCreate

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

Hay 3 pasos a seguir para desplazarse pantalla hacia arriba.

  1. Escribe en el archivo de manifiesto para su actividad:
  

androide: windowSoftInputMode = "adjustResize"

  1. Añadir línea siguiente en el método OnCreate () de su actividad
  

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

  1. A continuación, coloque toda su vista en "ScrollView" en el archivo XML como:
<?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. No se olvide de añadir androide:. Layout_gravity = "centro" en la matriz de disposición relativa

He intentado un método de Diego Ramírez, funciona. 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>

He encontrado una solución a mis problemas que es bastante mismos que los suyos.

En primer lugar, sólo tiene un LinearLayout con 2 elementos, un ImageView y una wich LinearLayout contiene 2 EditarTexto y un botón, por lo que necesitan para mantenerlos separados en pantalla completa sin teclado, y cuando aparece el teclado que debe buscar más cerca.

Así que he añadido la vista entre ellas con el atributo de altura y peso en 0DP 1, que me permitieron dejar mis puntos de vista se separan una de las formas entre sí. y cuando el teclado appers, ya que no tienen una altura fija, que acaba de cambiar el tamaño y mantener el aspecto.

Voila! El cambio de tamaño disposición y la distancia entre mi punto de vista es el mismo que el teclado está o no presente.

Aquí está llena código de manifiesto

<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 se encuentra en fragmentos entonces usted tiene que añadir el siguiente código a su onCreate en su actividad se resuelve problema para mí

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

En el archivo de manifiesto añadir la línea de abajo. Se trabajará

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

Está bien esto es muy tarde sin embargo he descubierto que si se agrega una vista de lista debajo de la edición de texto a continuación, el teclado se moverá todas las presentaciones en virtud de que EditarTexto sin mover el 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**

Esta es la única solución que funcionó para mí.

introducir descripción de la imagen aquí

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

Acabo de añadir la siguiente línea en el diseño de alto nivel y todo funcionó:

android:fitsSystemWindows="true"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top