2011-06-30 20 views
10

En mi aplicación, cuando los usuarios hacen clic o tocan en la vista Editar texto, a veces el enfoque se establece al principio. Por ejemplo, si el texto existente es "Hola". Los usuarios quieren hacer clic en él y cambiarlo a "H1 ¿Cómo estás?" agregando el texto "¿Cómo estás?". Pero dado que el enfoque está en el principio, se convierte en "¿Cómo estás? Hola". Así que siempre quiero enfocarme a la derecha del texto cuando lo selecciono. Cómo hago esto. Por favor, hágamelo saber con un poco de muestra si es posible. Gracias por su tiempo y ayuda.¿Cómo establecer el foco a la derecha del texto en EditText para Android?

Respuesta

34

usted puede poner explícitamente cursor a la última posición en el texto:

EditText editText = (EditText) findViewById(R.id.textId); 
int pos = editText.getText().length(); 
editText.setSelection(pos); 
+1

si desea solicitar Enfoque en una vista y luego establecer la selección, no se olvide de llamar también a requestFocus(); – cV2

5

Algo más especific acerca de que pregunte, puede utilizar el siguiente código:

EditText editText = (EditText) findViewById(R.id.textId);  
editText.setOnFocusChangeListener(new OnFocusChangeListener() { 
    @Override 
    public void onFocusChange(View v, boolean hasFocus) { 
     if(hasFocus){ 
      editText.setSelection(editText.getText().length()); 
     } 
    } 
}); 

la setOnFocusChangeLister método() es utilizado para detectar cuando el editText recibe el foco.

0

La solución anterior no está funcionando.

Aquí le doy una nueva solución para establecer el enfoque a la derecha del texto en edittext para android. Y está funcionando bien.

Mi código es:

EditText edt_ans = (EditText)findViewById(R.id.edt_answer); 

    edt_ans.addTextChangedListener(new TextWatcher() 
    { 
      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) 
      { 
       // TODO Auto-generated method stub 
       edt_ans.setSelection(edt_ans.getText().length()); 
      } 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count,int after) 
      { 
       // TODO Auto-generated method stub 

      } 
      @Override 
      public void afterTextChanged(Editable s) 
      { 
       // TODO Auto-generated method stub 

      } 
    }); 

feliz Codificación .... :)

+0

su respuesta establece la posición de intercalación onTextChanged not onClick que es lo que la pregunta original estaba pidiendo. Intenta no resucitar viejas preguntas ... –

0

Una forma más prominente sería el caso en que no es necesario tener cuidado de establecer la selección manualmente todo el tiempo. Así que usa CustomEditText en lugar de EditText en tu diseño.

public class CustomEditText extends EditText { 

    public CustomEditText(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    /** 
    * This is a Fix of buggy behavior of android, where after setting text using setText(...), selection remain on 
    * first character and not at last character. 
    */ 
    @Override 
    public void setText(CharSequence text, BufferType type) { 
     super.setText(text, type); 
     if (text != null && ! (text.toString().trim().length() == 0)) { 
      final int textLength = text.length(); 
      if (getSelectionEnd() != textLength) { 
       setSelection(textLength); 
      } 
     } 
    } 

} 
0

setSelección no funcionaba para mí, pero esto funciona como un encanto. Funciona en afterTextChanged también.

 @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) 
     { 
      edittext.requestFocus(edittext.getText().length()); 
     } 
0

En la nueva API u puede usar algo como esto:

//buttons setups 
private void buttonsSetupForRecommendations() { 
    button2.setNextFocusRightId(R.id.ok_button); 
    button2.setNextFocusLeftId(R.id.ok_button); 
    button2.setNextFocusDownId(R.id.cancel_button); 
    button2.setNextFocusUpId(R.id.cancel_button); 
    button.setVisibility(View.GONE); 
    button2.setText(R.string.cancel_text); 
    button1.setText(R.string.clear_text); 
    button1.setNextFocusRightId(R.id.cancel_button); 
    button1.setNextFocusLeftId(R.id.cancel_button); 
    button1.setNextFocusUpId(R.id.ok_button); 
    button1.setNextFocusDownId(R.id.ok_button); 
    button1.requestFocus(); 
} 

este trabajo con botón y otros artículos. U puede agregar este código de Java en ^^ o xml

0
public void ontextchangelistner(){ 

    if(s.toString().startsWith("0")) { 
     if (s.length() == 2) { 
      if (s.toString().contains("00")) { 

       editText.setText(s.toString().substring(1)); 
       int pos = editText.getText().length(); 
       editText.setSelection(pos); 
      } 
     } 
    } 

Si introduce primero en el tiempo cero en la edición de texto, se muestra; pero en la segunda vez presionando cero, este cero no se muestra. Espero que te ayude.

Cuestiones relacionadas