2012-04-20 15 views
6

Mi actividad tiene una barra superior y una barra inferior. el espacio entre la barra superior y la barra inferior tengo una distribución lineal con varias vistas de texto de edición dentro. Porque no quiero que mi diseño cambie de tamaño cada vez que aparezca el teclado, así que configuro android: windowSoftInputMode = "adjustPan" para mi actividad en el manifiesto. Pero cuando se abre el teclado, quiero desplazarme hacia abajo para seleccionar otro texto de edición para ingresar, no me permite hacerlo. Solo puedo seleccionar el texto de edición en la parte inferior cuando cierro el teclado. Eso es muy molesto e inconveniente. ¿Cómo puedo obtener el modo scrollview y ajustpan para que el teclado funcione bien?Cómo desplazar mi diseño al configurar android: windowSoftInputMode = "adjustPan"?

Por favor, ayúdenme. Muchas gracias.

+0

Tengo el mismo problema, pero no me gusta hacer la codificación que hizo para "falsificarlo" ... hmm – Ted

+0

hasta ahora esta solución ha funcionado bien, también busqué una alternativa que sea más simple. Espero que alguien más comparta una mejor solución para este problema. – MichaelP

+0

Pero esta solución oculta los botones, cuando se muestra el teclado virtual. Pero dependiendo de la resolución de la pantalla, etc., es posible que el botón no deba ocultarse, ¿no? – Ted

Respuesta

1

poner esas EditText en un ScrollView así:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/scrollView1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" > 

    <LinearLayout 
     android:id="@+id/linearLayout1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 

     <EditText 
      android:id="@+id/editText1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" > 

      <requestFocus /> 
     </EditText> 

     <EditText 
      android:id="@+id/editText2" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

     <EditText 
      android:id="@+id/editText3" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

    </LinearLayout> 

</ScrollView> 
+0

no me preguntan cómo hacer un diseño en xml, quiero saber cómo desplazar mi diseño cuando configuro android: windowSoftInputMode = "adjustPan" para mi actividad. – MichaelP

4

Por fin, me entero de una solución para mi problema, así que quiero compartir para alguien tal vez obtener el mismo problema en el futuro. Una breve descripción de mi diseño de la siguiente manera:

<myRelativeLayout> 
<topbar.../> 
<myscrollView> 
    <linearLayout> 
     //all stuff controls:editview,textview,.... 
    </linearLayout> 
</myscrollView> 
<bottombar.../> 

i crear clases personalizadas myRelativeLayout extender RelativeLayout

public class myRelativeLayout extends RelativeLayout{ 

public interface OnRelativeLayoutChangeListener { 
    void onLayoutPushUp(); 
    void onLayoutPushDown(); 
} 

private OnRelativeLayoutChangeListener layoutChangeListener; 
public myRelativeLayout(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    // TODO Auto-generated constructor stub 
} 

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    final int proposedheight = MeasureSpec.getSize(heightMeasureSpec); 
    final int actualHeight = getHeight(); 

    if (actualHeight > proposedheight){ 
     // Keyboard is shown 
     layoutChangeListener.onLayoutPushUp(); 
    } else if(actualHeight < proposedheight){ 
     // Keyboard is hidden 
     layoutChangeListener.onLayoutPushDown(); 
    }  
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
} 

public void setLayoutChangeListener(OnRelativeLayoutChangeListener layoutChangeListener) { 
    this.layoutChangeListener = layoutChangeListener; 
} 

public OnRelativeLayoutChangeListener getLayoutChangeListener() { 
    return layoutChangeListener; 
} 

}

Y en mi actividad, que acaba de establecer setLayoutChangeListener para myRelativeLayout para ocultar bottombar cuando el teclado aparece y muestra bottombar cuando el teclado se esconde:

myRlayout.setLayoutChangeListener(new OnRelativeLayoutChangeListener() { 

     @Override 
     public void onLayoutPushUp() { 
      // TODO Auto-generated method stub 
      myBottombar.setVisibility(View.GONE);//in my case i need to setVisibility(View.GONE) to bottombar in order for this bar is not displayed when softkeyboard show up. 
     } 

     @Override 
     public void onLayoutPushDown() { 
      // TODO Auto-generated method stub 
      myBottombar.setVisibility(View.VISIBLE);// redisplay myBottombar when keyboard is closed. 

     } 
    }); 

Dont forget set android: windowSoftInputMode = "adjustResize" para la actividad. Espero que esto sea útil para alguien que tenga el mismo problema.

+0

muy útil, muchas gracias –

+0

Gracias por esto, ¿no hay alguna manera de hacerlo sin la codificación adicional que "falsifica" la funcionalidad que queremos? – Ted

Cuestiones relacionadas