标签: spannablestring

SpannableStringBuilder创建具有多个字体/文本大小的String等示例?

我需要创建一个放在TextView中的String,它将显示如下字符串:

第一部分不大胆 大胆 休息不大胆

所以我想知道如何使用它SpannableStringBuilder来做到这一点?

我可以使用三个TextEdit来完成这个,但我想使用最佳解决方案.

android spannablestring spannablestringbuilder

70
推荐指数
8
解决办法
6万
查看次数

如何在同一部分文本上的TextView文本上设置多个跨度?

假设我有下一个文本:

你好stackOverflow

我希望将第二个单词设置为RelativeSizeSpan(设置相对字体大小)和TextAppearanceSpan(设置文本的颜色),如何将它们合并?

我所知道的是我可以选择其中一个,例如使用下一个代码:

final SpannableString textToShow = new SpannableString("Hello stackOverflow");
textToShow.setSpan(new RelativeSizeSpan(1.5f), textToShow.length() - "stackOverflow".length(),textToShow.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(textToShow);
Run Code Online (Sandbox Code Playgroud)

但我还需要设置颜色,甚至添加其他跨越类的其他功能......

我能做什么 ?

android font-size spannablestring

54
推荐指数
3
解决办法
5万
查看次数

SpannableString:是否可以应用两个或更多RelativeSizeSpans?

我正在尝试构造一个SpannableString,使它看起来像这样:

在此输入图像描述

两个字符(m,s)应小于其余字符.我试图在一个SpannableString中保存所有文本,并且我还尝试通过SpannableStringBuilder连接两个SpannableStrings.一个Spannable的代码如下所示:

spannable.setSpan(new RelativeSizeSpan(0.75f), spannable.length() - 1, spannable.length(), 0);
Run Code Online (Sandbox Code Playgroud)

但是,只应用了一种格式 - 使用SpannableStringBuilder时,只有"m"更小,而对整个文本使用一个SpannableString时,只有"s"更小.

调试还显示Spannables似乎只包含一个RelativeSizeSpan实例,这意味着一个类型只能有一个Span.这是真实的还是预期的行为?是否建议连接TextViews?

编辑:顺便说一下,我试图在这里删除HTML.fromHtml()调用性能原因(许多GC调用).

android spannablestring spannable

40
推荐指数
2
解决办法
3万
查看次数

如何使RelativeSizeSpan与顶部对齐

我有以下字符串RM123.456.我想要

  • 使RM相对较小
  • RM准确对齐

我几乎可以通过使用来实现它

spannableString.setSpan(new RelativeSizeSpan(0.50f), 0, index, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannableString, TextView.BufferType.SPANNABLE);
Run Code Online (Sandbox Code Playgroud)

结果看起来像

在此输入图像描述

但是,它与底部对齐.它没有与顶部对齐.

我试着用SuperscriptSpan.看起来像

在此输入图像描述

它没有做我想要的

  • SuperscriptSpan不会使文字变小.我无法控制其尺寸.
  • SuperscriptSpan 将使文本"在顶部对齐"

我可以知道,我怎样才能让RelativeSizeSpan 准确对齐?

这就是我希望实现的目标.

在此输入图像描述

请注意,我们不希望使用2 TextViews解决方案.

android spannablestring android-studio

34
推荐指数
6
解决办法
5186
查看次数

Android SpannableString在文本部分后面设置背景

我想创建类似于此图像上看到的内容: 在此输入图像描述

我设法使用SpannableStringBuilder创建evertyhing,橙色圆角矩形除外.我可以使用BackgroundColorSpan将背景设置为该颜色,但我找不到一种方法使其圆整.任何想法我怎样才能做到这一点?

提前致谢!

编辑:我正在使用Xamarin.Android,但这是我的代码:

stringBuilder.SetSpan(new BackgroundColorSpan(Application.Context.Resources.GetColor(Resource.Color.orangeColor)), stringBuilder.Length() - length, stringBuilder.Length(), SpanTypes.ExclusiveExclusive);
Run Code Online (Sandbox Code Playgroud)

android textview spannablestring spannable

33
推荐指数
3
解决办法
1万
查看次数

将Spannable与String.format()结合使用

假设您有以下字符串:

String s = "The cold hand reaches for the %1$s %2$s Ellesse's";
String old = "old"; 
String tan = "tan"; 
String formatted = String.format(s,old,tan); //"The cold hand reaches for the old tan Ellesse's"
Run Code Online (Sandbox Code Playgroud)

假设您希望以此字符串结束,但也Span为任何替换的单词设置了特定的集合String.format.

例如,我们还想做以下事情:

Spannable spannable = new SpannableString(formatted);
spannable.setSpan(new StrikethroughSpan(), oldStart, oldStart+old.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannable.setSpan(new ForegroundColorSpan(Color.BLUE), tanStart, tanStart+tan.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Run Code Online (Sandbox Code Playgroud)

是否有结识的开始指数的稳健的方式oldtan

请注意,只搜索'old'会在'cold'中返回'old',因此无效.

什么的工作,我想,正在寻找%[0-9]$s事前,并计算补偿值以反映在更换String.format.这看起来很令人头疼,我怀疑可能有一种方法String.format可以提供有关其格式化细节的更多信息.好吧,有吗?

android spannablestring spannable

23
推荐指数
3
解决办法
8394
查看次数

Android Linkify文本 - 单文本视图中的跨区文本 - 就像Twitter推文一样

我有一个textView和文字就好

"这是带KeyWord的简单文本和浏览链接 "

在上面的文字我想做..

单击链接将打开该URL单击该KeyWord在我的应用程序中打开一个新的活动

此外, 整个TextView还有一个click事件.

请帮我找一个解决方案.谢谢你,MKJParekh

android textview linkify spannablestring

20
推荐指数
3
解决办法
2万
查看次数

如何在ImageView周围对齐TextView?

在此输入图像描述

我试图在ImageView周围对齐TextView.我使用以下代码:

 private void createSpannableText(){
        TextView myTextView = (TextView) findViewById(R.id.textView);
        SpannableStringBuilder builder = new SpannableStringBuilder();
        builder.append(this.getText(R.string.loren__ipsum__max));
        int lengthOfPart1 = builder.length();
        builder.append(" ");
        builder.append(this.getText(R.string.lorem__ipsum));
        Drawable d = getResources().getDrawable(R.drawable.myImage);
        d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); // <---- Very important otherwise your image won't appear
        ImageSpan myImage = new ImageSpan(d);
        builder.setSpan(myImage, 0, lengthOfPart1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        myTextView.setText(builder);
    }
Run Code Online (Sandbox Code Playgroud)

但无法得到确切的结果.我该怎么办?在这种情况下我需要使用SpannableStringBuilder还是有另一种方法.请帮忙.我使用这个帖子http://majaxandroidtips.blogspot.in/2009/06/how-to-have-few-layout-elements-wrap_17.html 来获得解决方案.

PS:我还希望ImageView周围有6dp的边距

android alignment textview imageview spannablestring

17
推荐指数
1
解决办法
7890
查看次数

从SpannableStringBuilder获取SpannableString的最佳方法

我正在使用类似wiki的解析器,为一组标记令牌创建跨度.它正在工作,但在令牌迭代器中我经常需要将a上的部分结果转换SpannableStringBuilder为a SpannableString.这被称为非常频繁,所以我是最有效的解决方案,并避免创建额外的对象.

目前我正在使用;

SpannableStringBuilder stuff=complex_routine_that_builds_it();
SpannableString result=SpannableString.valueOf(stuff);
Run Code Online (Sandbox Code Playgroud)

然而,这个valueOf调用在内部构建了SpannableString一种从头开始,执行a toString和循环来复制分配spans.

正如SpannableStringBuilder名字所暗示的,我认为,也许有一种更快的方式来获得SpannableString从建设者.这是真的吗?

performance android spannablestring

17
推荐指数
1
解决办法
8591
查看次数

有没有办法在不中断文本的情况下在TextView中插入ImageSpan?

似乎为了在Android中将SpanSpan添加到Spannable,我必须用Image替换一些文本.例如:

Spannable span = new SpannableString("Foo imageplace Bar!");
Drawable android = context.getResources().getDrawable(R.drawable.android);
android.setBounds(0, 0, 32,32);
ImageSpan image = new ImageSpan(android, ImageSpan.ALIGN_BASELINE);
span.setSpan(image, 4, 14, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
Run Code Online (Sandbox Code Playgroud)

这将用图像替换"imageplace".因为我正在处理复杂的多跨文本和重复,所以在我想要android图标的每个地方插入无意义的文本有点令人头疼.但看起来如果跨度的开始和结束是相同的,则不会包含图像.有没有办法解决?

android spannablestring imagespan

16
推荐指数
2
解决办法
1万
查看次数