![](/img/trans.png)
[英]what is requestRawExternalStorageAccess in SDK 31?
[英]EditText append is duplicating numbers on SDK 31
注意:這似乎只發生在 Android 12 (SDK 31)
我有一個非常復雜的 TextWatcher 用例,其中我需要在用戶鍵入時更改文本,但是我可能需要更改的不僅僅是他們剛剛鍵入的字符。 出於這個原因,我不能使用 InputFilter。
對於這個例子,為了突出我看到的錯誤,我已經簡化了我的用例。 我只想在輸入的每個字符后添加一個空格。
在我的 TextWatcher 中:
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
editText.removeTextChangedListener(this)
addSpace(s, start, before, count)
editText.addTextChangedListener(this)
}
private fun addSpace(s: CharSequence?, start: Int, before: Int, count: Int) {
val text = s ?: return
val spaced = "$text "
editText.text.clear()
editText.text.append(spaced)
}
注意:我使用 clear() 和 append() 來避免鍵盤切換。 如果我使用 setText(),將切換回默認鍵盤。
這在添加字母時效果很好:
但是,當添加數字時,它將重復每個數字。 添加一些日志記錄,似乎在我的更改完成后再次調用 onTextChanged 並且我重新添加了偵聽器。
Again this works just fine on SDK 30, and SDK 32, so it seems Android fixed the regression, but does not yet have a patch for SDK 31. Has anyone run into this? 知道是否有我可以關注的現有票嗎? 無法找到對此的任何參考。
根據TextWatcher#onTextChanged的文檔:
調用此方法是為了通知您,在 s 內,從 start 開始的 count 個字符剛剛替換了之前有 length 的舊文本。 嘗試通過此回調對 s 進行更改是錯誤的。
重點是我的。 s: CharSequence?
和editText.text
指的是相同的結構,因此您的代碼正在進行禁止的更改,並且似乎會產生不可預測的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.