Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.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 更改资源字符串中的单词颜色_Android_String_Android Widget - Fatal编程技术网

Android 更改资源字符串中的单词颜色

Android 更改资源字符串中的单词颜色,android,string,android-widget,Android,String,Android Widget,android中是否有设置字符串资源颜色的方法?我的意思是,我知道我可以使用一些html标记来更改字符串样式(或子字符串),但没有找到任何可以更改颜色的标记。我在stackoverflow这里看到了其他解决方案,比如在设置文本之前将字符串传递给Html.fromHtml(string),但我想在字符串资源编辑器中这样做。有没有可能?字符串本身没有颜色,但您可以在文本视图中更改文本的颜色。请参阅,但有两种方法可以做到这一点 XML 代码 据我所知,这是不可能的。我会用一个吊环来改变颜色 i

android中是否有设置字符串资源颜色的方法?我的意思是,我知道我可以使用一些html标记来更改字符串样式(或子字符串),但没有找到任何可以更改颜色的标记。我在stackoverflow这里看到了其他解决方案,比如在设置文本之前将字符串传递给Html.fromHtml(string),但我想在字符串资源编辑器中这样做。有没有可能?

字符串本身没有颜色,但您可以在文本视图中更改文本的颜色。请参阅,但有两种方法可以做到这一点

XML

代码


据我所知,这是不可能的。我会用一个吊环来改变颜色

    int colorBlue = getResources().getColor(R.color.blue);
    String text = getString(R.string.text);
    SpannableString spannable = new SpannableString(text);
    // here we set the color
    spannable.setSpan(new ForegroundColorSpan(colorBlue), 0, text.length(), 0);
斯潘纳布真的很好。您可以在那里设置和内容,然后将其附加到文本视图。优点是可以在一个视图中使用不同的颜色

编辑:好的,如果您只想设置颜色,上面提到的解决方案就是解决方法。

看起来该方法可行:

    <string name="some_text">this is <font fgcolor="#ffff0000">red</font></string>
这是红色的

我最近为这个问题制定了一个灵活的解决方案。它使我能够使用方法链接轻松地向子字符串添加多个样式。它利用了吊环。当您想要为某个子字符串指定颜色时,可以使用ForegroundColorSpan

public StyledString putColor(String subString, @ColorRes int colorRes){
    if(getStartEnd(subString)){
        int color = ColorUtil.getColor(context, colorRes);
        ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(color);
        fullStringBuilder.setSpan(foregroundColorSpan, startingIndex, endingIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    }
    return this;
}

有关完整代码,请参阅。

谢谢您的回答。我认为它没有很好的表述。我提到了更改资源字符串中子字符串的颜色。很抱歉。我明白了,如果这是一种方法,我可以用一些“代码”来创建我的字符串资源,以知道我要更改的子字符串的开始和结束位置,并以您公开的方式处理它。谢谢。
int colorBlue=getResources().getColor(R.color.blue)。。。。spannable.setSpan(新的ForegroundColorSpan(colorBlue),0,text.length(),0)可以被这样的一行替换
spannable.setSpan(新的ForegroundColorSpan(R.color.blue)..
此外,我个人会在调用过程中使用Spanable类中声明的标志常量,而不是硬编码0。这使得代码更可读、更可维护。这正是我要做的。它似乎在4.3中停止工作(可能更早)--有人知道怎么回事吗?还有一个难看的解决办法:对于上面的任何颜色
7fffffff
应用以下命令:
ff6890a5
放入计算器(可以先转换为十进制),然后翻转符号(可以转换回十六进制)以最后8位十六进制数字为例,使用
。好吧,这真是太棒了。它工作得非常好。非常感谢,我希望我很久以前就知道了。请注意,使用这种方法的任何人都应该使用方法来获取字符串,而不是方法。前一种方法在字符串和后者不会。另外,使用
Resources.getText(id:)
方法,您可以在
font
元素中使用
color
属性,而不是
fgcolor
。虽然链接很好,但请注意,答案实际上应该包含答案。请注意,仅仅是指向外部站点的链接可能是这样做的原因。
    <string name="some_text">this is <font fgcolor="#ffff0000">red</font></string>
public StyledString putColor(String subString, @ColorRes int colorRes){
    if(getStartEnd(subString)){
        int color = ColorUtil.getColor(context, colorRes);
        ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(color);
        fullStringBuilder.setSpan(foregroundColorSpan, startingIndex, endingIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    }
    return this;
}