2010-06-11 17 views
24

En edittext, después de escribir la tecla 'Enter', el sistema crea una nueva línea dentro de él. Me gustaría centrarme en el próximo texto de edición, no en una línea nueva. cómo codificar? mi código en XML está por debajoKeyCode_Ingrese al texto de edición siguiente

<EditText 
    android:id="@+id/txtNPCode" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textSize="18sp" 
    android:layout_alignLeft="@+id/lblNPCode" 
    android:layout_below="@+id/lblNPCode" 
    android:layout_centerHorizontal="true"/> 
<EditText 
    android:id="@+id/txtCNPCode" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textSize="18sp" 
    android:layout_alignLeft="@+id/lblCNPCode" 
    android:layout_below="@+id/lblCNPCode" 
    android:layout_centerHorizontal="true"/> 

También caputer código clave en setOnKeyListener

tCNPCode.setOnKeyListener(new OnKeyListener() { 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      // TODO Auto-generated method stub 
      if(keyCode == 66) { 
       Toast.makeText(S_PCode.this, "Enter Key", Toast.LENGTH_LONG).show(); 
       //tNPCode.setFocusable(true); 
      } 
      return false; 
     } 
    }); 

Respuesta

12

usted tiene que utilizar el método requestFocus. En su caso, será algo como:

tCNPCode.setOnKeyListener(new OnKeyListener() { 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if(keyCode == 66) { 
      txtCNPCode.requestFocus(); 
     } 
     return false; 
    } 
}); 
+1

Gracias. Yo uso requestFocus. Funcionó. necesita agregar retorno verdadero ;? – soclose

+3

Sugeriría filtrarlo también con ACTION_UP porque presionará el método onKey dos veces y si está implementando setOnKeyListener en una lista de EditTexts dentro de una ArrayList , correrá el riesgo de avanzar dos pasos. if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) – jkanini

+0

No utilizaría el int literal real, ya que no es legible en absoluto. – styler1972

34

Ni siquiera tiene que usar OnKeyListener. Simplemente agregue la línea android:singleLine="true" a su EditText. Después de esta operación, EditText se comporta exactamente como lo desea. Entonces, en su caso particular:

<EditText 
    android:id="@+id/txtNPCode" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textSize="18sp" 
    android:layout_alignLeft="@+id/lblNPCode" 
    android:layout_below="@+id/lblNPCode" 
    android:layout_centerHorizontal="true" 
    android:singleLine="true" 
/> 
<EditText 
    android:id="@+id/txtCNPCode" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textSize="18sp" 
    android:layout_alignLeft="@+id/lblCNPCode" 
    android:layout_below="@+id/lblCNPCode" 
    android:layout_centerHorizontal="true" 
/> 

resuelve el problema.

+0

Esto combinado con la acción IME fue la mejor opción gracias –

+0

Gracias por esta explicación impresionante y simple – anetha

+1

Este id bien, pero el android: singleLine = "true" está en desuso. –

9

La mejor manera es usar una de las opciones para inputType, por ejemplo: android:inputType="textPersonName" Esto logrará el efecto deseado. Eche un vistazo a las otras opciones también, le ahorrará tiempo en el futuro :)

No debe usar android: singleLine = "true", ya que está obsoleto. Esto es lo que dice la documentación al respecto:

Este atributo es obsoleto y se sustituye por la bandera textMultiLine en el atributo inputType. Tenga precaución al modificar los diseños existentes de , ya que el valor predeterminado de singeLine es falso (modo de varias líneas ), pero si especifica cualquier valor para inputType, el valor predeterminado es modo de línea única. (Si se encuentran ambos atributos singleLine y inputType , los indicadores inputType anularán el valor de singleLine).

6

considerar opciones IME, buena descripción aquí http://androidcookbook.com/Recipe.seam;jsessionid=C824437B48F346E23FBE5828969029B4?recipeId=422 y documentación aquí http://developer.android.com/reference/android/widget/TextView.html#attr_android:imeOptions.

Lo único que necesita es agregar el atributo android: imeOptions = "actionNext" en cada EditText. El teclado aparece con una tecla Siguiente donde Ingresó solía estar y permite navegar al siguiente Editar Texto.

Pero el orden de "actionNext" es de arriba hacia abajo. Por ejemplo, si tiene un diseño horizontal:

<LinearLayout android:orientation="horizontal" > 
     <EditText android:id="@+id/et1" android:imeOptions="actionNext" /> 
     <EditText android:id="@+id/et2" android:imeOptions="actionNext" /> 
</LinearLayout> 

et2 nunca se enfoca. Usted debe fijarlo en el código:

et1.setOnEditorActionListener(new OnEditorActionListener() 
{ 
    @Override 
    public boolean onEditorAction(TextView v, int actionId, 
      KeyEvent event) 
    { 
     switch (actionId) 
     { 
     case EditorInfo.IME_ACTION_NEXT: 
      boolean result = false; 
      TextView v1 = (TextView) v.focusSearch(View.FOCUS_RIGHT); 
      if (v1 != null) 
       result = v1.requestFocus(View.FOCUS_RIGHT); 
      else if (!result) 
      { 
       v1 = (TextView) v.focusSearch(View.FOCUS_DOWN); 
       if (v1 != null) 
        result = v1.requestFocus(View.FOCUS_DOWN); 
      } 
      if (!result) 
       v.onEditorAction(actionId); 
      break; 

     default: 
      v.onEditorAction(actionId); 
      break; 
     } 
     return true; 
    } 
}); 

enlace original: https://groups.google.com/forum/?fromgroups=#!topic/android-developers/OykOG6XtE8w

1

acaba de establecer el número máximo de línea a la caja de EditText en el archivo de diseño xml: android:maxLength="1"

Cuestiones relacionadas