Edw*_*alk 5 android android-resources
我曾经能够做到这一点:
<string name="foo">white <font fgcolor="#ff6890a5">blue</font></string>
Run Code Online (Sandbox Code Playgroud)
但现在它不再起作用了.它似乎是整数解析代码中的一个错误; 请参阅https://code.google.com/p/android/issues/detail?id=58192
问题是,我收到客户的投诉现在 ; 我不能等待修复bug.
有没有人知道解决方法,例如使用color.xml中的命名资源或类似的东西?
ETA:我发现它fgcolor="blue"仍然有效,但它是错误的蓝色阴影.某处是否有合法颜色名称列表?也许我能找到一个足够接近的人.如果颜色是没有高位设置的数字,它也可以工作#7f6890a5,但当然这太微弱而无用; 我需要纯色,而不是半透明.
ETA:浏览源代码显示以下颜色:
aqua 0x00FFFF
black 0x000000
blue 0x0000FF
fuchsia 0xFF00FF
green 0x008000
grey 0x808080
lime 0x00FF00
maroon 0x800000
navy 0x000080
olive 0x808000
purple 0x800080
red 0xFF0000
silver 0xC0C0C0
teal 0x008080
white 0xFFFFFF
yellow 0xFFFF00
Run Code Online (Sandbox Code Playgroud)
这并不能解决我的问题,但也许其他人在这个问题上搜索可能会发现这些信息很有用.
我们如何利用这样一个事实:没有高位设置的颜色仍然有效,只需用正确的颜色替换它?所以你可以有这样的方法:
private CharSequence fixSpanColor(CharSequence text) {
if (text instanceof Spanned) {
final SpannableString s = new SpannableString(text);
final ForegroundColorSpan[] spans = s.getSpans(0, s.length(), ForegroundColorSpan.class);
for (final ForegroundColorSpan oldSpan : spans) {
final ForegroundColorSpan newSpan = new ForegroundColorSpan(oldSpan.getForegroundColor() | 0xFF000000);
s.setSpan(newSpan, s.getSpanStart(oldSpan), s.getSpanEnd(oldSpan), s.getSpanFlags(oldSpan));
s.removeSpan(oldSpan);
}
return s;
} else {
return text;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您需要通过此方法传递具有所需颜色重音的任何文本,最简单的示例是修改所有调用,如下所示:
tv.setText(getText(R.string.foo));
Run Code Online (Sandbox Code Playgroud)
至:
tv.setText(fixSpanColor(getText(R.string.foo)));
Run Code Online (Sandbox Code Playgroud)
希望,根据代码的结构,可能已经有一个中心位置可以添加这个额外的方法调用.
| 归档时间: |
|
| 查看次数: |
3187 次 |
| 最近记录: |