我正在开发一个android应用程序,我想知道如何更改XML字符串中特定链接的颜色。
在strings_example.xml中的
<string name="hello_there">Hello There!<a href="tel:XXXXXXXXX" color="#8ABD37>More info!</a></string>
这是我的活动布局
<TextView
somecode
android:text="@strings/hello_there"
style="@styles/whatever"/>
那么,如何在不覆盖xml字符串内部颜色的情况下应用“任何样式”?
另外:我无法将样式放置在xml字符串内,我必须从TextView对其进行样式设置
答案 0 :(得分:1)
您可以使用如下所示的HTML样式属性
在<![CDATA[ ...raw html... ]]>
内使用string.xml
<string name="formated_string"><![CDATA[ <p Hello there <b>More info</b> and <i>Here</i </p>]]> </string>
在您的java类内部
TextView myTv = (TextView)findViewById(R.id.foo);
myTv.setText(Html.fromHtml(getString(R.string.formated_string)));
您可以根据需要添加自定义html样式
答案 1 :(得分:0)
在android中有两种样式的文字样式:
1-您可以使用SpannableString并将文本分成多个部分,如下所示:
val spannable = SpannableString("Sample Text.......")
spannable.setSpan(ForegroundColorSpan(Color.RED), 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
myTextView.text = spannable
2-或者您可以通过以下方式在textview中呈现html:
textView.setText(Html.fromHtml(
"Hello There!<a href=\"tel:XXXXXXXXX\" color=\"#8ABD37\">More info!</a>"));
//或
textView.setText(Html.fromHtml(getResources().getString(R.string.hello_there)));
答案 2 :(得分:0)
我已经疯狂了一些复杂的解决方案。我正在用自定义变量替换当前的URLSpan
。
TextView textView = findViewById(R.id.textView);
// Make the link to be clickable
textView.setMovementMethod(LinkMovementMethod.getInstance());
// Url link
Spanned text = Html.fromHtml(getString(R.string.hello_there));
// We search for the first occurrence of URLSpanand we replace it with custom one
SpannableStringBuilder spannable = new SpannableStringBuilder(text);
Object[] spans = spannable.getSpans(0, spannable.length(), Object.class);
for (Object span : spans) {
if (span instanceof URLSpan) {
int spanStart = spannable.getSpanStart(span);
int spanEnd = spannable.getSpanEnd(span);
int spanFlags = spannable.getSpanFlags(span);
URLSpan spanUrlBase = (URLSpan) span;
MyUrlSpan myUrlSpan = new MyUrlSpan(spanUrlBase.getURL());
spannable.setSpan(myUrlSpan, spanStart, spanEnd, spanFlags);
break;
}
}
textView.setText(spannable);
-
private class MyUrlSpan extends URLSpan {
public MyUrlSpan(String url) {
super(url);
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(Color.GREEN);
}
}
-
Xml无法识别所有特殊字符。我必须将<
解码为正确的声明。
<string name="hello_there"><a color="#8ABD37" href="tel:XXXXXXXXX">More info!</a></string>
更多信息here。
答案 3 :(得分:0)
我讨厌回答自己。这是最好的方法:
<style name="generic_body_style_with_links" parent="generic_body_style">
<item name="android:textColorLink">@color/green_400</item>
</style>
通过这种方式,您可以将常规文本的颜色设置为generic_body_style,例如,黑色,将<a href =""..../>
的颜色设置为绿色。全部都在同一个TextView中,而不会拆分。
其他类似的方法很有用,但是在这种情况下您不能应用它,因为您将用TextView样式的默认颜色覆盖此颜色。