我正在尝试整理一个可以随机将表情符号返回给用户的小型Android应用程序。我的目的是使用实际的unicode表情符号字符,并将它们作为unicode字符串字符返回。
我构建了一个完整的unicode字符串数组,可以从中随机选择,很多都会正确显示。但是有些字符显示为不受支持的字符(带有x的矩形)。
显然不是每个平台都会支持每个unicode表情符号字符,但如果可能的话,我想要一种方法来确定什么是支持的字符,哪些不是支持的字符。理想的情况是查询支持的字符列表,但能够测试单个字符也可以正常工作。
答案 0 :(得分:3)
所以,当你谈到一个“不支持”的角色时,听起来你的意思是当前的字体没有字符的字形(并且应用程序没有后备逻辑来查找执行的不同字体,或者系统没有任何字体。
在常规Java中,这很容易:给定java.awt.Font
的实例,您可以使用the canDisplay
method查看它是否具有给定Unicode字符的字形。
无论出于何种原因,Android API似乎都没有提供一种方法来确定您实际使用的字体。 (android.graphics.Typeface
将该信息保密:请参阅"Check the family of a Typeface object in Android"。)但是,您可能至少尝试使用new java.awt.Font("SansSerif", java.awt.Font.PLAIN, 12)
之类的内容来获取基本的12磅无衬线字体。当然,您需要测试一下,看看它是否为真实字体能够显示的表情符号提供了一个可用的近似值。
答案 1 :(得分:3)
同时查看已在API级别23中添加的Canvas.hasGlyph(String)
。您可以使用它来测试像表情符号这样的字符是否有可用的字形。
这是documentation所说的:
boolean hasGlyph (String string)
确定绘画上设置的字体是否支持字形 字符串。最简单的情况是字符串包含单个字符串 字符,此方法确定字体是否具有 字符。在多个字符的情况下,该方法返回true 如果有一个表示连字的字形。例如,如果 输入是一对区域指标符号,判断是否 这对有一个表情符号标志。
最后,如果字符串包含变体选择器,则仅限该方法 如果字体包含特定于该变体的字形,则返回true。
检查是在整个后备链上完成的,而不仅仅是立即数 引用的字体。
另见
答案 2 :(得分:2)
您可以使用activity_main.xml
...
<Button
android:id="@+id/Button2"
android:background="@null"
android:text="Contacts"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="contacts"/>
<Button
android:id="@+id/Button3"
android:background="@null"
android:text="Purchase Coins"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="buy_coins"/>
MainActivity.java
...
public void contacts(View v) {
Intent intent = new Intent(this, Contacts.class);
startActivity(intent);
}
public void buy_coins(View v) {
Intent intent = new Intent(this, BuyCoins.class);
startActivity(intent);
}
检查设备上的Unicode版本是否定义了字符。