T_C*_*T_C 7 android textwatcher android-edittext spannablestring
我实际上是在尝试进行卡片格式化,因为我正在尝试实现谷歌从链接中所说的内容
您没有被告知发生了更改的位置,因为其他afterTextChanged()方法可能已经进行了其他更改并使偏移无效.但是如果您需要在这里知道,可以在onTextChanged(CharSequence,int,int,int)中使用setSpan(Object,int,int,int)来标记您的位置,然后从此处查找跨度最终的位置.
从上面我所理解的是我需要在onTextChanged()中使用setSpan保存[CharSequence s,int start,int before,int count]并以某种方式在afterTextChanged()中检索它们.
问题是,在onTextChanged()中我在哪个对象上调用setSpan(),如何在afterTextChanged()中检索这些保存的值.
所以我想出了这个。下面是一个可以用作起点的准系统示例。
import android.text.Editable;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.TextWatcher;
import android.text.style.RelativeSizeSpan;
public class AwesomeTextWatcherDeluxe implements TextWatcher {
private RelativeSizeSpan span;
private SpannableString spannable;
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// We can use any span here. I use RelativeSizeSpan with size 1, which makes absolutely nothing.
// Perhaps there are other spans better suited for it?
span = new RelativeSizeSpan(1.0f);
spannable = new SpannableString(s);
spannable.setSpan(span, start, start + count, Spanned.SPAN_COMPOSING);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
int beginIndex = spannable.getSpanStart(span);
int endIndex = spannable.getSpanEnd(span);
// Do your changes here.
// Cleanup
spannable.removeSpan(span);
span = null;
spannable = null;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2281 次 |
| 最近记录: |