gpt4 book ai didi

android - 在用户键入主题标签时更改文本的颜色

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:36:11 26 4
gpt4 key购买 nike

我正在开发一个用户可以将内容发布到提要的应用程序。在我的编辑文本(用于撰写)中,文本颜色为灰色。但是,当用户键入哈希标签时,例如#help 我需要在他们键入时将该文本着色为黑色,因此当用户键入“#”时,文本必须着色为黑色,直到他们开始一个新单词,然后文本颜色需要恢复为灰色。

我一直在尝试使用文本观察器和可跨越的字符串来着色。

这是我对文本观察器 onTextChanged

所做的
        @Override
public void onTextChanged(CharSequence s, int start, int before, int count) {


//Remove Text watcher to prevent infinite look
mTextField.removeTextChangedListener(contentFieldWatcher);
String startChar = null;
startChar = Character.toString(s.charAt(start));
L.i(getClass().getSimpleName(), "CHARACTER OF NEW WORD: " + startChar);


if (startChar.equals("#")) {
tagCheck(s.toString().substring(start), start, start + count);
}
}

tagCheck 方法

private void tagCheck(String s, int start, int end) {
mSpannable.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.black_colour)), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}

mSpannable 是一个 Spannable。

此方法的问题是“#”显示为 startChar,但是当用户键入下一个字符(符号或字母)时,它会显示为 startChar。就好像用户键入圣诞老人一样 - 's' 仍然是 startChar。所以我面临的问题是他如何在用户键入主题标签时为文本动态着色。

因此,普通字母可以正常工作,但是当您使用符号时,它不会。我希望这个问题很清楚..我已经看了几天了,一切都变得模糊了:)

最佳答案

我尝试并找到了解决方案

你可以使用下面的代码

Spannable mspanable;
int hashTagIsComing = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);



final EditText edt = (EditText) findViewById(R.id.editText1);

mspanable = edt.getText();

edt.addTextChangedListener(new TextWatcher() {

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {

String startChar = null;

try{
startChar = Character.toString(s.charAt(start));
Log.i(getClass().getSimpleName(), "CHARACTER OF NEW WORD: " + startChar);
}
catch(Exception ex){
startChar = " ";
}

if (startChar.equals("#")) {
tagCheck(s.toString().substring(start), start, start + count);
hashTagIsComing++;
}

if(startChar.equals(" ")){
hashTagIsComing = 0;
}

if(hashTagIsComing != 0) {
tagCheck(s.toString().substring(start), start, start + count);
hashTagIsComing++;
}
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub

}

@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub

}
});



}


private void tagCheck(String s, int start, int end) {
mspanable.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.color)), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}

关于android - 在用户键入主题标签时更改文本的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35267478/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com