java - 仅对连接字符串的一部分进行样式设置 (Android)

标签 java android string user-interface

我意识到下面的代码是不正确的,所以我认为它是伪代码。

public void setCommentText1(String text) {
    String commentUsername1 = commentUser1.getText().toString();
    commentUsername1.setTextColor(Color.parseColor("#bdbdbd"));
    commentText1.setText(String.format("%s %s", new Object[]{commentUsername1, text}));
}

为什么我不能做这样的事情?我有一个格式化的字符串,它从我的用户名对象中获取一个字符串,并从我的评论对象中获取一个字符串。我想将用户名设置为特定颜色(最好设置为不可见),但我不能依赖注入(inject) HTML 或 XML,因为我正在从我的服务器中提取字符串。为什么我不能只设置字符串的其中一个组件的颜色?当然,您不能在 String 上设置 TextColor(它是一个 TextView 修饰符),但是有替代方法吗?

在这里查看我的原始帖子,它是相关的但总体上是一个不同的问题:Wrapping comment text beneath a username in an Android app

最终工作解决方案:

下面标记的答案很好,而且一般有效。它也更干净,但对于我的特殊问题,我需要执行以下操作:

public void setCommentUser1(String text) {
    commentUser1.setText(text);
}

public void setCommentText1(String text) {
    SpannableStringBuilder builder = new SpannableStringBuilder();
    String commentUsername1 = commentUser1.getText().toString();
    SpannableString commentUsername1Spannable = new SpannableString(commentUsername1);
    commentUsername1Spannable.setSpan(new ForegroundColorSpan(Color.RED), 0, commentUsername1Spannable.length(), 0);
    builder.append(commentUsername1Spannable);
    builder.append(" ");
    builder.append(text);
    commentText1.setText(builder, TextView.BufferType.SPANNABLE);
}

最佳答案

这是您应该使用 Spannable 的地方。

final SpannableStringBuilder builder = new SpannableStringBuilder(username)
        .append(" ")
        .append(text)
        .setSpan(new ForegroundColorSpan(Color.parseColor("#bdbdbd")),
                0 /* startIndex */,
                username.length() /* endIndex */,
                Spanned.SPAN_INCLUSIVE_INCLUSIVE /* flags */);

commentText1.setText(builder);

关于java - 仅对连接字符串的一部分进行样式设置 (Android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33578004/

相关文章:

android - 更新后TextView字符串消失

java - Jersey : Is it possible to specify multiple values in @DefaultValue() annotation

android - 从软键盘 android xamarin 禁用表情符号

java - 使用 JSON 迭代器输入安全警告

android - android.media 的ADT导入无法解析

c++ - 可以在下面定义一个更简单的函数-(to.string())

string - 检查字符串变量是否为空或空,或充满空格

java - 对 HttpSession 的部分模拟

java - libgdx 获取按下的按键

java - 在 createQuery 中使用 SELECT DISTINCT 返回列表值