我有一个TextView,它接收指向它的TextFormatted属性的SpannableString。我想要构建这个SpannableString的方法就像一个项目符号列表,在这个列表中,如果某个项目满足某些条件,它的颜色就会改变,否则它将保持默认的文本颜色;然后,我将每个SpannableString添加到一个列表中,最后将它们合并到一个SpannableString中,以返回给TextView。问题是我找不到一种方法去做。
我已经尝试添加每个SpannableString,但是+操作符不能使用它们。我尝试过使用TextUtils.Concat(),但它们似乎不像在Java语言中那样工作--在Java语言中,它们同时接受string和StringFormatted,但在Xamarin.Android中,它们只接受string。
发布于 2019-09-02 11:04:59
将列表转换为单个SpannableString
您可以将列表转换为SpannableStringBuilder
List<SpannableString> spannableStringList = new List<SpannableString>();
CustomTypefaceSpan customTypefaceSpan = new CustomTypefaceSpan(typeface);
var spannableString1 = new SpannableString("Hello");
spannableString1.SetSpan(customTypefaceSpan, 0, spannableString1.Length(), SpanTypes.ExclusiveExclusive);
spannableString1.SetSpan(new ForegroundColorSpan(Color.Green), 0, spannableString1.Length(), SpanTypes.InclusiveInclusive);
var spannableString2 = new SpannableString("Leo");
spannableString2.SetSpan(new ForegroundColorSpan(Color.Red),0, spannableString2.Length(), SpanTypes.InclusiveInclusive);
spannableStringList.Add(spannableString1);
spannableStringList.Add(spannableString2);
var ssBuilder= new SpannableStringBuilder();
foreach (var item in spannableStringList)
{
ssBuilder.Append(item);
}
textView.SetText(ssBuilder, BufferType.Spannable);发布于 2019-09-03 11:50:06
我发现,就像Xamarin.Android有一个TextView.TextFormatted属性来将TextView的文本设置为格式化(Spannable)文本一样,它也有一个TextUtils.ConcatFormatted,用于连接Spannable对象。
var spans = new List<SpannableString>();
var someSpan = new SpannableString("Foo");
// Style someSpan as needed
spans.Add(someSpan);
var result = new SpannableString(TextUtils.ConcatFormatted(spans.ToArray()));https://stackoverflow.com/questions/57735042
复制相似问题