如何在TextView中更改Unicode字符的颜色?

7

'我从维基百科的这个链接中获取了红心的代码,并想在我的TextView中展示生成的自定义表情符号,但为什么它总是显示黑色而不是明确在维基百科中说明为红色的U+2665的颜色呢?下面是我的代码:

  TextView tv=(TextView)findViewById(R.id.testText);

 //  tv.setText(Html.fromHtml("\u2665"));



tv.setText(Html.fromHtml("<font color='red'>"+"\u2665"+"</font>"));

它没有变成红色,它仍然是黑色的,如果我输入其他文本,它会显示为红色。

字体没有关于颜色的信息...它们总是在字体的颜色中。 - Selvin
我认为你只需要改变文本颜色:Html.fromHtml("<font color="#FF0000">\u2665</font>")。 - Christopher
https://dev59.com/wofca4cB1Zd3GeqPlJ6W#28369713 - Husnain Aslam
将您的Unicode转换为十六进制,然后像这样使用它。tv.setText(Html.fromHtml("♥")); - Husnain Aslam
@Selvin,请查看我的编辑并给我建议。 - theUturn
@theUturn 这段代码运行良好。 - Hardik Parmar
6个回答

3
要使它变为红色,您需要将它的textColor设置为RED。就像这样 ->
TextView tv=(TextView)findViewById(R.id.testText);
tv.setText(Html.fromHtml("\u2665"));
tv.setTextColor(Color.RED); // Set color here

3
说明: TextView 字体将其呈现为表情符号,这意味着它基本上使用预定义的图像,因此在这些图像上忽略字体颜色。有一个 Unicode 字符可以用作后缀,告诉字体使用文本变体(VARIATION SELECTOR 15,"\uFE0E",使用方法如下:"\u2665\uFE0E"),但显然 Android 忽略了这些,在我的手机上(Samsung SM-G800F with 5.1.1)至少是这样的。

股票浏览器和 Chrome 也无法识别变体选择器,而 Firefox for Android 在我的手机上可以工作。

显然,这在不同的手机上是不同的,您可以在 Stackexchange UX 上的相关问题中 看到。


解决方案: 对我而言,解决问题的方法是手动为TextView设置另一个支持这些字符但不支持表情符号的ttf字体,即来自GNU FreeFont Project的FreeSans。

下载该字体并将其放入src/assets/fonts中。 然后设置您的TextView的字体:

    Typeface type = Typeface.createFromAsset(getAssets(),"fonts/FreeSans.ttf");
    mTextView.setTypeface(type);

你应该将Typeface加载到静态常量中,以避免反复创建它。

那个字体在我的S8+上的7.0系统中无法使用(默认为Roboto)。有没有其他没有表情符号的字体? - Steve M

0

将您的unicode转换为十六进制,并像这样使用它。tv.setText(Html.fromHtml("&#x2665;"));

查看我的答案以获取更多信息。


0

使用代码\u2764来表示红色心形符号

这对我起作用了。


0

还有,你可以在 XML 文件中设置文本视图的颜色,就像这样...

<TextView
            android:id="@+id/tv_id"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_margin="@dimen/margin_5"
            android:textColor="@color/white"
/>

在Java文件中设置自定义表情文本,它可以正常工作。


@theUtrun 不需要将 Unicode 转换为十六进制。 - Hardik Parmar

0

在每个棋子后面添加

U+FE0E或在此情况下为\uFE0E

VARIATION SELECTOR-15,以将它们强制呈现为文本。参考资料,U+FE0F VARIATION SELECTOR-16 将强制字符呈现为表情符号。

例如:

tv.setText(Html.fromHtml("\u2665\uFE0E"));
tv.setTextColor(Color.BLUE);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接