Tôi cần phát hiện các thay đổi văn bản trong EditText. Tôi đã thử TextWatcher, nhưng nó không hoạt động theo cách tôi mong đợi. Lấy phương pháp OnTextChanged:Phát hiện các thay đổi trong EditText (TextWatcher không hiệu quả)
public void onTextChanged(CharSequence s, int start, int before, int count)
Nói rằng tôi có dòng chữ "John" trong đã có trong EditText. Nếu nhấn một phím khác, "e", s
sẽ là "Johne", start
sẽ là 0, before
sẽ là 4 và count
sẽ là 5. Cách tôi mong đợi phương pháp này hoạt động sẽ là sự khác biệt giữa những gì EditText trước đây và những gì sắp trở thành.
Vì vậy, tôi mong chờ:
s = "Johne"
start = 4 // inserting character at index = 4
before = 0 // adding a character, so there was nothing there before
count = 1 // inserting one character
tôi cần để có thể phát hiện những thay đổi cá nhân mỗi khi một phím được nhấn. Vì vậy, nếu tôi có văn bản "John", tôi cần phải biết "e" đã được thêm vào chỉ mục 4. Nếu tôi backspace "e", tôi cần phải biết "e" đã bị xóa khỏi chỉ mục 4. Nếu tôi đặt con trỏ sau "J "và backspace, tôi cần biết" J "đã bị xóa khỏi chỉ mục 0. Nếu tôi đặt" G "trong đó" J "là, tôi muốn biết" G "được thay thế" J "tại chỉ mục 0.
Cách tôi có thể đạt được điều này? Tôi không thể nghĩ ra một cách đáng tin cậy để làm điều này.
thử onKeyListener cho EditText –
gì về dán từ clipboard? –
Một vấn đề khác mà tôi gặp phải là nói rằng tôi có một phạm vi văn bản được chọn. Trong bất kỳ phương thức nào của TextWatcher, getSelectionStart và End luôn là cùng một chỉ mục, bất kể tôi có văn bản được chọn hay không. –