Android 如何在onTextChanged()中使用setSpan()保存onTextChanged()的参数?
我实际上是在尝试卡片格式化,因为我正试图实现谷歌从 您不会被告知更改发生在何处,因为其他afterTextChanged()方法可能已经进行了其他更改并使偏移无效。但是如果您需要知道这里,您可以在onTextChanged(CharSequence,int,int,int)中使用setSpan(Object,int,int,int)来标记您的位置,然后从这里查找跨度结束的位置 从上面我了解到的是,我需要在onTextChanged()中使用setSpan保存[CharSequence s,int start,int before,int count],并在extextchanged()中以某种方式检索它们Android 如何在onTextChanged()中使用setSpan()保存onTextChanged()的参数?,android,android-edittext,textwatcher,spannablestring,Android,Android Edittext,Textwatcher,Spannablestring,我实际上是在尝试卡片格式化,因为我正试图实现谷歌从 您不会被告知更改发生在何处,因为其他afterTextChanged()方法可能已经进行了其他更改并使偏移无效。但是如果您需要知道这里,您可以在onTextChanged(CharSequence,int,int,int)中使用setSpan(Object,int,int,int)来标记您的位置,然后从这里查找跨度结束的位置 从上面我了解到的是,我需要在onTextChanged()中使用setSpan保存[CharSequence s,int
问题是,我应该在onTextChanged()中调用哪个对象的setSpan(),以及如何在AfterextChanged()中检索这些保存的值。所以我想出了这个方法。下面是一个可以作为起点的简单示例
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;
}
}
对于几乎相同的用例,我也在想同样的事情。你有没有想过?哇,看起来很可怕。我也有点搞砸了,发现基本上可以将CharSequence s转换为Spanable,因为在大多数情况下,参数s是一个子类,它将Spanable实现为一个span对象,您可以使用TextWatcher本身(传递这个)。它可以工作!还使用一个只创建一次的普通
对象,而不是相对性span
,并使用0作为设置span()的标志<代码>私有对象span=新对象()。。。;spannable.setSpan(范围,开始,开始+计数,0)代码>