2012-06-23 35 views
23

Tôi đang tìm cách ngăn người dùng di chuyển vị trí con trỏ ở bất kỳ đâu. Con trỏ phải luôn ở cuối giá trị EditText hiện tại. Ngoài ra, người dùng không thể chọn bất kỳ thứ gì trong EditText. Bạn có bất kỳ ý tưởng làm thế nào để nhận ra rằng trong Android bằng cách sử dụng EditText?Làm thế nào để tắt định vị con trỏ và chọn văn bản trong EditText? (Android)

Để làm rõ: người dùng có thể chèn văn bản nhưng chỉ ở cuối.

Trả lời

35

Tôi đã gặp vấn đề tương tự. Đây đã kết thúc làm việc cho tôi:

public class CustomEditText extends EditText { 

    @Override 
    public void onSelectionChanged(int start, int end) { 

     CharSequence text = getText(); 
     if (text != null) { 
      if (start != text.length() || end != text.length()) { 
       setSelection(text.length(), text.length()); 
       return; 
      } 
     } 

     super.onSelectionChanged(start, end); 
    } 

} 
+1

Có, tôi đã kết thúc với phần nào tương tự. Tôi không hài lòng với giải pháp này vì vẫn có tay cầm màu xanh này, nhưng không sao nếu tôi không biết cách tiếp cận nào tốt hơn. Dù sao cũng cảm ơn bạn. –

+2

Câu trả lời hay. Điều này hoạt động hoàn hảo. – toobsco42

+0

Cảm ơn! Đây chính xác là những gì tôi cần. – CodyMace

6

này sẽ đặt lại con trỏ tập trung vào vị trí cuối cùng của văn bản

editText.setSelection(editText.getText().length()); 

Phương pháp này sẽ tắt con trỏ di chuyển trên touch

public class MyEditText extends EditText{ 

    @Override 
    public boolean onTouchEvent(MotionEvent event) 
    { 
     final int eventX = event.getX(); 
     final int eventY = event.getY(); 
     if((eventX,eventY) is in the middle of your editText) 
     { 
       return false; 
     } 
     return true; 
    } 
} 

Và Bạn có thể sử dụng một trong hai thuộc tính xml

android: cursorVisible

hoặc chức năng java

setCursorVisible (boolean)

tắt con trỏ nhấp nháy của EditText

+0

Lưu ý rằng bạn vẫn phải lo lắng về các phím mũi tên/trackball/D-pad thay đổi vị trí con trỏ - mà có thể được xử lý bởi một số loại 'onKeyDown()' shenanigans. Và, điều này không * vô hiệu hóa * lựa chọn, và tôi không biết nếu điều đó là có thể. – CommonsWare

+0

Cảm ơn bạn nhưng đây không phải là giải pháp chính xác mà tôi đang tìm kiếm. Vấn đề với việc vô hiệu hóa tất cả các sự kiện cảm ứng trên màn hình là bạn không thể lấy nét được. Và tôi muốn có con trỏ nhấp nháy - chỉ có khả năng di chuyển con trỏ sẽ bị tắt. –

1

Nghe có vẻ như cách tốt nhất để làm điều này là để làm cho lớp CustomEditText của riêng bạn và ghi đè/sửa đổi bất kỳ phương pháp có liên quan nào. Bạn có thể xem số source code cho số EditText tại đây.

public class CustomEditText extends EditText { 

    @Override 
    public void selectAll() { 
     // Do nothing 
    } 

    /* override other methods, etc. */ 

} 
2

Hãy thử điều này:

mEditText.setMovementMethod(null); 
Các vấn đề liên quan