Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何实现只有特定部分是彩色的SpannableStringBuilder?_Android_Emoji_Spannablestringbuilder - Fatal编程技术网

Android 如何实现只有特定部分是彩色的SpannableStringBuilder?

Android 如何实现只有特定部分是彩色的SpannableStringBuilder?,android,emoji,spannablestringbuilder,Android,Emoji,Spannablestringbuilder,我需要实现一个字符串,改变它的某些部分的颜色以突出显示它。我需要创建一个类似于热键指南的东西,它显示通过按突出显示的数字可以执行的操作。我曾经使用Html。从HTML,但我读到,它的速度不快,因为解析。我需要在慢速设备上运行代码。这是我当前的代码 private SpannableStringBuilder spannedTxt(String txt, int count){ String tagStart = "<p>", tagEnd = "</p>"

我需要实现一个字符串,改变它的某些部分的颜色以突出显示它。我需要创建一个类似于热键指南的东西,它显示通过按突出显示的数字可以执行的操作。我曾经使用Html。从HTML,但我读到,它的速度不快,因为解析。我需要在慢速设备上运行代码。这是我当前的代码

private SpannableStringBuilder spannedTxt(String txt, int count){
        String tagStart = "<p>", tagEnd = "</p>";
        String temp = txt;
        int emojCount = count /2;
        emojCount += 1;

        SpannableStringBuilder ssb = new SpannableStringBuilder();

        for (int i = 0; i < count; i++) {
            SpannableString spannable = new SpannableString(temp);
            Log.d(TAG, "convertToSpan: "+spannable.toString());

            spannable.setSpan(new ForegroundColorSpan(Color.RED),
                    txt.indexOf(tagStart) + tagStart.length(), txt.indexOf(tagEnd),
                    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

            ssb.append(spannable);

            temp = temp.replaceFirst(tagStart, "");
            temp = temp.replaceFirst(tagEnd, "");
        }

        return ssb;
    }
private SpannableStringBuilder spandtxt(字符串txt,整数计数){
字符串tagStart=“”,tagEnd=“

”; 字符串temp=txt; int emojCount=计数/2; emojCount+=1; SpannableStringBuilder ssb=新的SpannableStringBuilder(); for(int i=0;i
它当前所做的是更改

中第一个子字符串的样式,这是一个数字。由于某些原因,标记开始和标记结束并没有从最终的SpannableStringBuilder中删除,即使在我记录时,它显示标记已删除

我使用

来知道哪一部分是需要着色的部分。我需要它,因为动作中也可以包含数字,我不需要在动作中回忆这些数字。例如,操作1(按1)。该字符串还包含每个操作之间的表情符号,我使用这些符号的计数来知道该字符串包含多少个操作

更简单的解释:
下面是我需要做的

操作1(按
1

)操作2(按
2

)以

操作1(按1)操作2(按2)
您可以使用Html.fromHtml()静态函数将Html代码解析为具有属性的文本视图文本(如Html的属性),如下所示:


因此,经过思考,我找到了解决问题的方法。我改变了一点为SpannableStringBuilder创建字符串的方式

Action 1 (Press <p>[1]<p>)    �� ��    Action 2 (Press <p>[2]<p>)    �� ��    Action 3 (Press <p>[3]<p>)
操作1(按[1])�� ��    动作2(按[2])�� ��    动作3(按[3])
使用上面的字符串,我将代码修改为下面的代码

private SpannableStringBuilder spannedTxt(String txt){
        String tagStart = "<p>";
        String temp = txt;

        String[] actTxtArr = txt.split(tagStart);

        SpannableStringBuilder ssb = new SpannableStringBuilder();

        for (int i = 0; i < actTxtArr.length; i++) {
            String arrTxt = actTxtArr[i];
            SpannableString spannable;

            if(arrTxt.contains("[")){
                arrTxt = arrTxt.replace("[", "");
                arrTxt = arrTxt.replace("]", "");

                spannable = new SpannableString(arrTxt);

                spannable.setSpan(new ForegroundColorSpan(Color.RED),
                        arrTxt.indexOf(arrTxt), arrTxt.indexOf(arrTxt) + arrTxt.length(),
                        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            }else{
                spannable = new SpannableString(arrTxt);
            }

            ssb.append(spannable);
        }

        return ssb;
    }
private SpannableStringBuilder spandtxt(字符串txt){
字符串tagStart=“”;
字符串temp=txt;
字符串[]actTxtArr=txt.split(tagStart);
SpannableStringBuilder ssb=新的SpannableStringBuilder();
for(int i=0;i

现在,它按照我希望的方式工作。我希望可能需要实现类似我所做的事情的人会觉得这很有用。

你能举一个预期的例子吗。你想要什么作为一个例子。你是指我的预期输出吗?实际上我根本无法理解你的问题。请详细说明一次。我已经添加了一个简短的解释,以便你能够理解nt要使用spannable更改文本的颜色,请使用span启用?正如我在问题上所说,我想使用span nablestringbuilder,因为Html.fromHtml非常慢,因为它需要解析才能从我以前读过的答案工作,我需要在慢速设备上运行它。