使用FontAwesome在代码中动态设置字体图标而无需使用String.xml

5
我正在尝试在TextView中使用fontawesome.ttf加载字体图标。如果我像这样设置字符串值,则通过string.xml设置它可以正常工作并显示图标。但是如果以编程方式设置相同的文本"",即textView.setText(""),则不会显示图标,而是在TextView上显示相同的文本。
有没有其他方法在程序中显示图标而不需要引用string.xml文件?

1
谢谢@DerGolem,它有效。 - Atmaram
好的,我会将其设置为答案,这样您就可以接受它并将其从未回答的问题队列中删除。 - Phantômaxx
4个回答

12

尝试使用Unicode编码... \uf007
这应该可以很好地工作:

textView.setText("\uf007");

嗨@DerGolem,如果我像这样将字符串硬编码到textview中:textView.setText("\uf007");那么它可以正常工作,但是如果我从服务器获取相同的字符串并将其设置为textview,则只会显示"\uf007"。有任何想法吗?我是否需要转换/编码字符串以在textview中设置? - Atmaram
1
如果我从服务器获取它,那么很可能服务器使用与Unicode UTF-8不同的编码方式...尝试从服务器传递类似[user-icon]这样的内容,然后在客户端用uf007替换它。 - Phantômaxx
@FrankN.Stein,我无法在TextView中设置图标,尝试使用来自服务器的字符串""和"[]"并将其设置为文本,但只显示了""而没有图标。您能否详细说明一下? - RaRa
只需将“”替换为“\uf007”。 - Phantômaxx

6

我尝试使用16进制整数转换该字符串,结果运行良好。

new String(Character.toChars(Integer.parseInt(
                        str, 16)))

str的Unicode值类似于f007。


运行得非常好! - MKJParekh
非常感谢,这是最简单的修复方法。 - Nikita Vishwakarma

2

这是我目前找到的一个很好的例子。

原回答

从回答中复制并粘贴:

  1. fontawesome-webfont.ttf 文件复制到您的 assets 文件夹中
  2. 使用此页面找到所需图标的字符实体:http://fortawesome.github.io/Font-Awesome/cheatsheet/
  3. 为每个图标在 strings.xml 中创建一个条目。例如,对于一个心形图标:

    <string name="icon_heart">&#xf004;</string>

  4. 在 xml 布局的视图中引用该条目:

<Button android:id="@+id/like" ... android:text="@string/icon_heart" />

  1. 在 onCreate 方法中加载字体并将其设置为适当的视图:

Typeface font = Typeface.createFromAsset( getAssets(), "fontawesome-webfont.ttf" ); Button button = (Button)findViewById( R.id.like ); button.setTypeface(font);

不要忘记使用 setTypeface()


到目前为止,最好的答案。运行得非常顺畅。 - Anjana Silva

0
将代码放入XML中,然后使用。
getString(R.string.fa_star_o);

运行良好


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