当前位置: 首页 > 面试题库 >

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

柴坚诚
2023-03-14
问题内容

我想创建类似此图片所示的内容: 在此处输入图片说明

我设法用SpannableStringBuilder创建了Evertyhing,除了橙色的圆角矩形。我可以使用BackgroundColorSpan将背景设置为该颜色,但是我找不到使它变圆的方法。有什么想法可以实现吗?

提前致谢!

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

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

问题答案:

如果有人在处理罗斯福的代码示例时遇到困难(我肯定是,也许是因为它是Xamarin.Android?),这是一个更基本的Android Java版本的翻译:

    public class RoundedBackgroundSpan extends ReplacementSpan {

        private static int CORNER_RADIUS = 8;
        private int backgroundColor = 0;
        private int textColor = 0;

        public RoundedBackgroundSpan(Context context) {
            super();
            backgroundColor = context.getResources().getColor(R.color.gray);
            textColor = context.getResources().getColor(R.color.white);
        }

        @Override
        public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) {
            RectF rect = new RectF(x, top, x + measureText(paint, text, start, end), bottom);
            paint.setColor(backgroundColor);
            canvas.drawRoundRect(rect, CORNER_RADIUS, CORNER_RADIUS, paint);
            paint.setColor(textColor);
            canvas.drawText(text, start, end, x, y, paint);
        }

        @Override
        public int getSize(Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fm) {
            return Math.round(paint.measureText(text, start, end));
        }

        private float measureText(Paint paint, CharSequence text, int start, int end) {
            return paint.measureText(text, start, end);
        }
    }

为了便于使用,以下代码段取自Activity,基本上在每个标签字符串周围放置了一个圆角背景,每个标签之间都有一个空格缓冲区。请注意,注释掉的行仅带有背景色,看起来效果不佳。


    SpannableStringBuilder stringBuilder = new SpannableStringBuilder();

    String between = "";
    for (String tag : eventListing.getTags()) {
       stringBuilder.append(between);
       if (between.length() == 0) between = "  ";
       String thisTag = "  "+tag+"  ";
       stringBuilder.append(thisTag);
       stringBuilder.setSpan(new RoundedBackgroundSpan(this), stringBuilder.length() - thisTag.length(), stringBuilder.length() - thisTag.length() + thisTag.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
       //stringBuilder.setSpan(new BackgroundColorSpan(getResources().getColor(R.color.gray)), stringBuilder.length() - thisTag.length(), stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    }

    TextView tv = new TextView(this);
    tv.setText(stringBuilder);


 类似资料:
  • html给页面设置背景色后,给文字设置不同的背景色,文字的位置会发生偏移,无法对齐,如何解决? 我也不知道为啥,截图粘贴过来后看起来几乎没区别,但自己跑起来,看着很明显。 详细描述: (1)当仅仅给文字设置不同背景色时,文字不会发生偏移: 代码: 运行结果: (2)当设置html背景色时,文字设置相同或不设置背景色时,文字不会发生偏移: 代码: 运行结果: (3)设置html背景色后给文字设置不同

  • 看,应用程序的背景颜色和2个禁用文本字段的背景颜色不同问题:如何更改禁用和不可编辑文本字段的背景颜色。 是右边的文本字段(在照片中)。我尝试过的是:把

  • 我目前正在尝试利用Spring Boot CLI支持我的公司代理。我尝试了一系列不同的方法来设置Spring Boot CLI的代理,但都没有成功。 我已尝试设置: 我以前发现过几年前关闭的github bug,但似乎与此无关:https://github.com/spring-projects/spring-boot/issues/136 谢谢你的帮助!

  • 问题内容: 我想为文本区域中的特定行设置颜色。到目前为止,我发现的是以下内容 但这是行不通的。我究竟做错了什么? 编辑:好的,我一直在尝试,我尝试使用 添加文本,而不是添加文本,然后重新样式,但无济于事。 问题答案: 我不确定JTextArea是否可以设置太多详细的样式,因为它可能是根据所选字体,颜色等为整个文档设置样式的。使用JTextPane / JEditorPane可能会有更多的运气。 编

  • 我正在创建一个AlertDialog与自定义视图和窗口背景。设置一个ColorDrawable如预期的那样工作,但是从资源中设置一个BitmapDrawable会使对话框出现在屏幕的正上方(而不是居中)。(注意:我说的是对话框背后的背景(通常是透明的灰色,而不是对话框的背景本身!) 对话框背景(@drawable/Dialog_bg): 对话框布局: 用于显示可着色的对话框的代码:- 代码显示与B

  • 一些背景信息:这个项目是一个简单的图像,在项目结束时,它将成为我电脑屏幕的背景。 我想模糊背景的一部分,这样文本的一部分就更清晰了。我可以模糊图像中文本本身的部分,但这是我最后的选择。我不想这样做,因为在未来的项目中,我想随着一些东西的移动而主动模糊背景(我还没有开始这个未来的项目,所以我无法更好地描述这个项目)。 有人知道如何模糊背景的一部分吗?对于这个项目,它需要大约400x200像素,模糊1