2012-06-03 22 views
16

He creado un proyecto de prueba simple que muestra una ventana emergente que contiene un EditText (en Android 2.2). Cuando toco EditText, se muestra el teclado virtual, como era de esperar. Sin embargo, el teclado suave cubre EditText, y no puedo hacer que la pantalla se mueva para mantener el EditText a la vista de la manera que hubiera pensado. Mi código:El teclado suave cubre un EditText en una ventana emergente

TestAdjustPanActivity.java:

package com.example; 

import android.app.Activity; 
import android.graphics.drawable.BitmapDrawable; 
import android.os.Bundle; 
import android.view.Gravity; 
import android.widget.PopupWindow; 

public class TestAdjustPanActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     final PopupWindow pw = new PopupWindow(this); 
     pw.setContentView(getLayoutInflater().inflate(R.layout.popup, null, false)); 
     pw.setWidth(400); 
     pw.setHeight(600); 
     pw.setFocusable(true); 

     pw.setOutsideTouchable(true); 
     pw.setTouchable(true); 
     pw.setBackgroundDrawable(new BitmapDrawable()); 

     // This is the line referred to in the edit: 
     pw.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); 

     findViewById(R.id.main).post(new Runnable() { 
      public void run() { 
      pw.showAtLocation(findViewById(R.id.main), Gravity.NO_GRAVITY, 0, 0); 
      } 
     }); 
    } 
} 

main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/main" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/text" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/hello" /> 

</LinearLayout> 

popup.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="#666666" 
     android:orientation="vertical" > 

     <EditText 
      android:id="@+id/current_password" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="40dp" 
      android:layout_marginLeft="10dp" 
      android:layout_marginRight="10dp" 
      android:layout_marginTop="300dp" /> 
    </LinearLayout> 

</ScrollView> 

... y mi AndroidManifest.xml Qué contiene la línea android:windowSoftInputMode="stateUnspecified|adjustPan" en la etiqueta para la única actividad en la aplicación.

¿Alguna idea? Ninguna de las otras publicaciones sobre SO relacionadas con este tema lo ha hecho por mí. ¿Qué es lo que me falta que impide que la vista se desplace de la manera que yo esperaría?

EDIT: intenté agregar una línea en TestAdjustPanActivity como se indica, lo que causó que la pantalla funcionara perfectamente en un dispositivo con Android 3.2 que tengo. Sin embargo, todavía no funciona en mi dispositivo Android 2.2, lo que hace que esto sea aún más confuso.

Respuesta

4

Para cualquiera de tropezar con esto en el futuro, acabé utilizando un diálogo en lugar de un PopupWindow y panoramizar para mantener el EditText a la vista funciona bien en 2.2 con un Diálogo.

0

Debe cambiar

android:windowSoftInputMode="stateUnspecified|adjustPan 

a

android:windowSoftInputMode="stateHidden|adjustPan" 
+0

Meh, no hay suerte, lamentablemente. ¡Gracias! – Lewis

3

hay manera más sencilla. Simplemente proporcione un diseño alternativo para el teclado activo.

  1. Haga clic izquierdo en proyecto seleccione: "Herramientas Android/Nuevo archivo de recursos ...".
  2. Elige el diseño, dale el nombre de archivo "principal" (no te preocupes por los conflictos).
  3. Haga clic en "Siguiente". Luego, en la lista de la izquierda, seleccione "teclado" y muévalo a la derecha (haga clic en "->").
  4. En el lado derecho, seleccione el estado del teclado.
  5. Haga clic en terminar.
  6. Ahora copia contenido de su main.xml situado en "res/layout" al nuevo archivo en res/layout-keyssoft".
  7. correcta nuevo diseño de tal manera que el teclado no es de esa manera. Recuerde que debe mantener la misma s "ID" para los componentes respectivos en esos dos diseños (que es la razón por la copia era necesario pegar).
  8. Disfruta de cómo funciona

leer sobre configuration changes para entender cómo funciona. Tenga en cuenta que todos los cambios de configuración (orientación cambio, cambio de idioma, ...) causará la recreación de la actividad (en tal caso, el argumento de onCreate no es nulo) por lo que puede proporcionar diferentes diseños para diferir ent casos.

+0

De acuerdo con los documentos de Android, esto solo funciona cuando la disponibilidad real de un teclado cambia, no para cuando simplemente se muestra u oculta, desafortunadamente. Sin embargo, mencionan la propiedad keyboardHidden de la clase Configuration, que voy a ver. ¡Gracias! – Lewis

1

cambio de este

android:windowSoftInputMode="stateUnspecified|adjustPan" 

a

android:windowSoftInputMode="adjustPan" 

sólo en el archivo de manifiesto

Cuestiones relacionadas