2011-06-30 15 views
10

W mojej aplikacji, gdy użytkownik kliknie lub dotknie w widoku Edytuj tekst, ostrość jest czasami ustawiona na początek. Na przykład, jeśli istniejący tekst to "Cześć". Użytkownicy chcą go kliknąć i zmienić na "H1 Jak się masz?" poprzez dodanie tekstu "Jak się masz?". Ale ponieważ ostrość jest na początku, staje się "Jak się masz? Cześć". Dlatego zawsze chcę ustawić ostrość na prawą część tekstu po wybraniu. Jak mam to zrobic. Daj mi znać, jeśli to możliwe, z próbką. Dziękuję za twój czas i pomoc.Jak ustawić ostrość na prawo tekstu w EditText dla Androida?

Odpowiedz

34

Można jawnie umieścić daszka do ostatniej pozycji w tekście:

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

Jeśli chcesz poprosić o fokus na widok, a następnie ustawić wybór, nie zapomnij dodatkowo wywołać requestFocus(); – cV2

5

coś więcej especific o które pytasz, można użyć następny kod:

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()); 
     } 
    } 
}); 

metoda setOnFocusChangeLister() jest służy do wykrywania, kiedy editText otrzymuje fokus.

0

Powyższe rozwiązanie nie działa.

Tutaj podaję nowe rozwiązanie ustawiania ostrości na prawo tekstu w edytorze tekstu dla Androida. I działa dobrze.

Mój kod to:

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 

      } 
    }); 

Szczęśliwy Coding .... :)

+0

Twoja odpowiedź ustawia pozycję karetki onTextChanged, a nie onClick - o co pytało pierwotne pytanie. Proszę, staraj się nie wskrzewać bardzo starych pytań ... –

0

znaczniejszą sposobem byłoby gdzie nie trzeba dbać o ustawienie wybrane ręcznie przez cały czas. Tak więc użyj CustomEditText zamiast EditText w swoim układzie.

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

seSelection nie działał dla mnie, ale działa to jak urok. Działa również po afterTextChanged.

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

Na nowym API U można używać coś takiego:

//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(); 
} 

ta praca z przyciskiem i innych przedmiotów. U można dodać to na kodzie java ^^ lub 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); 
      } 
     } 
    } 

Jeśli wprowadzisz pierwsze zero w tekście edycji, wyświetli się; ale po drugim naciśnięciu zera to zero nie jest pokazane. Mam nadzieję, że ci to pomoże.

Powiązane problemy