setText(CharSequence, TextView.BufferType)和setText(CharSequence)的区别

5

setText(CharSequence, TextView.BufferType)setText(CharSequence)有什么区别?我们应该在什么情况下使用它们?

3个回答

1
setText (CharSequence text)

设置TextView的字符串值。而
setText (CharSequence text, TextView.BufferType type) 

设置此TextView要显示的文本,并设置它是否存储在styleable/spannable缓冲区中以及它是否可编辑。
所有的BufferType选项如下:
  1. TextView.BufferType.EDITABLE
  2. TextView.BufferType.NORMAL
  3. TextView.BufferType.SPANNABLE

例如:

myEditText.setText("This is new text from setText with BufferType EDITABLE.",  TextView.BufferType.EDITABLE); 

4
我认为这个答案并没有解释得很清楚,它只是重复了三个可能的值的名称。将Manish的略微编辑过的回答与devconsole的评论结合起来会更加有启发性。 - m_katsifarakis
@m_katsifarakis请检查此答案和Manish的答案的时间。 - Giru Bhai
@GiruBhai 当然,它们几乎同时发布,但是该评论是针对原帖作者的,以便他可以更好地选择一个被接受的答案。 - m_katsifarakis

1
你可以从textview的代码中看到差异。
  if (type == BufferType.EDITABLE || getKeyListener() != null ||
            needEditableForNotification) {
        createEditorIfNeeded();
        Editable t = mEditableFactory.newEditable(text);
        text = t;
        setFilters(t, mFilters);
        InputMethodManager imm = InputMethodManager.peekInstance();
        if (imm != null) imm.restartInput(this);
    } else if (type == BufferType.SPANNABLE || mMovement != null) {
        text = mSpannableFactory.newSpannable(text);
    } else if (!(text instanceof CharWrapper)) {
        text = TextUtils.stringOrSpannedString(text);
    }

如果您默认使用普通的setText,它会采用TextView.BufferType.NORMAL类型,这基本上是将普通字符串转换为SpannedString。


1
最后一句话并不完全正确,默认情况下setText调用setText(text, mBufferType)。虽然mBufferType默认为BufferType.NORMAL,但是它在由构造函数调用的setText(CharSequence,BufferType)中设置。简而言之:setText默认使用最近使用的缓冲区类型,通常是TextView构造时使用的类型。 - devconsole
我相信这个答案的示例代码,结合@devconsole的评论和更全面的解释会更有用。 - m_katsifarakis

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接