当前位置: 首页 > 知识库问答 >
问题:

如何在onTextChanged()中使用setSpan()保存onTextChanged()的参数?

祖新觉
2023-03-14

我实际上正在尝试做卡片格式化,为此我正在尝试实现谷歌从链接所说的

由于其他afterTextChanged()方法可能已经进行了其他更改并使偏移量无效,因此不会告诉您更改发生的位置。但是如果您需要知道这里,可以使用onTextChanged(CharSequence,int,int,int)中的setSpan(Object,int,int,int)来标记您的位置,然后从这里查找span结束的位置。

从上面我了解到的是,我需要在onTextChanged()中使用setSpan保存[字符序列s,int start,int before,int count],并在extextChanged()中以某种方式检索它们。

问题是,在onTextChanged()中调用哪个对象的setSpan(),以及如何在AfterextChanged()中检索这些保存的值。

共有1个答案

田志
2023-03-14

所以我想出了这个。下面是一个可以作为起点的简单示例。

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;
    }
}
 类似资料:
  • 问题内容: 我试图动态地保存具有不同颜色的编辑文本,但是当我通过将其转换为HTML形式进行保存时,它只会将文本保存为一种颜色,而不是我选择的颜色。 这是Textchanged,str是可扩展文本。 问题答案: 在文本更改后尝试此操作,它将解决您的问题。

  • 我编写了下面的代码来弄清楚onTextChanged()方法是如何工作的: 我注意到:当我只打字时,计数非常简单: 现在,如果我添加3个(或更多)数字,然后继续键入字母,就会发生以下情况: 对我来说,输入3位数字似乎会以某种方式改变TextWatcher的行为,使其将之后的所有内容视为Char而不是CharSequence。 对这种行为有什么解释吗?

  • 我已经在我的应用程序中编辑文本以操纵产品数量,但是如果我要更改数量,那么问题就是在那个时候获得NPE。要更改编辑文本中的数量,我需要删除现有内容并需要添加新数量,请检查以下代码

  • 问题内容: 我试图让一个TextBox在每次击键时触发它的onTextChanged事件,而不是仅在失去焦点时才触发。我以为添加AsyncPostBackTrigger可以做到这一点,但仍然无法正常工作。我要做什么甚至有可能吗?代码如下: 问题答案: 使用javascript引发文本框控件时,您需要调用该函数。 但是,由于您的文本框位于更新面板中,因此,每当用户按下某个键时,该文本框都会重新呈现,

  • 我正在尝试添加一个搜索功能,在这个功能中,每当用户输入文本(一个字母接一个字母)时,网站都会向服务器发送一个收集信息的请求。对于这一点,我需要的是我假设的ContextChanged事件?我尝试过使用它,但活动无法启动。 还有我的代码: 你认为哪里不对?yall是否有比“ContextChanged事件”更好的解决方案来获得每次按键和搜索框?

  • 从这里得到帮助-PUT和DELETE-RESTful API Express MongoDB Mongoose 但是得到错误-http://localhost:8080/app/modify/59203c7d9532c34903000002net::ERR_EMPTY_响应,节点服务器停止并出现错误“Collection”。“保存”不是一个函数。