2011-06-30 34 views
10

Trong ứng dụng của tôi khi người dùng nhấp hoặc chạm vào chế độ Chỉnh sửa văn bản, trọng tâm đôi khi được đặt ở đầu. Ví dụ: nếu văn bản hiện tại là "Xin chào". Người dùng muốn nhấp vào nó và thay đổi nó thành "H1 Bạn thế nào?" bằng cách thêm văn bản "Bạn khoẻ không?". Nhưng kể từ khi trọng tâm là trong đầu, nó sẽ trở thành "Làm thế nào là bạn? Hi". Vì vậy, tôi luôn muốn đặt tiêu điểm ở bên phải phần lớn văn bản khi được chọn. Làm thế nào để tôi làm điều này. Xin vui lòng cho tôi biết với một số mẫu nếu có thể. Cảm ơn bạn đã dành thời gian và sự giúp đỡ của bạn.Làm cách nào để đặt tiêu điểm ở bên phải văn bản trong EditText cho android?

Trả lời

34

Bạn rõ ràng có thể đặt dấu nháy vào vị trí cuối cùng trong văn bản:

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

nếu bạn muốn yêu cầu Tập trung vào chế độ xem và sau đó đặt lựa chọn, đừng quên gọi thêm requestFocus(); – cV2

5

Something especific thêm về mà bạn yêu cầu, bạn có thể sử dụng mã tiếp theo:

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

phương pháp setOnFocusChangeLister() là được sử dụng để phát hiện khi editText nhận được tiêu điểm.

0

Giải pháp trên không hoạt động.

Ở đây tôi cung cấp cho bạn giải pháp mới cho tập trung tiêu điểm ở bên phải văn bản trong edittext cho android. Và nó hoạt động tốt.

Mã của tôi là:

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 

      } 
    }); 

Chúc mừng Mã hóa .... :)

+0

câu trả lời của bạn đặt vị trí dấu mũ trênTextChanged không onClick, đó là những gì câu hỏi ban đầu đã được yêu cầu. Hãy cố gắng không hồi sinh những câu hỏi rất cũ ... –

0

Một cách nổi bật hơn sẽ là nơi bạn không cần phải chăm sóc thiết lập lựa chọn bằng tay tất cả các thời gian. Vì vậy, sử dụng CustomEditText thay vì EditText trong bố cục của bạn.

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

setSelection không hoạt động đối với tôi, nhưng điều này hoạt động như sự quyến rũ. Hoạt động trên afterTextChanged là tốt.

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

Trên api mới u có thể sử dụng một cái gì đó như thế này:

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

công việc này với nút và các mặt hàng khác. Bạn có thể thêm mã này vào mã java ^^ hoặc 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); 
      } 
     } 
    } 

Nếu bạn nhập lần đầu tiên bằng văn bản chỉnh sửa, nó hiển thị; nhưng trong lần thứ hai nhấn 0, số không này không được hiển thị. Tôi hy vọng nó sẽ giúp bạn.

Các vấn đề liên quan