【问题标题】:Display all Unicode chars in TextView在 TextView 中显示所有 Unicode 字符
【发布时间】:2011-08-28 15:07:00
【问题描述】:

有什么方法可以在我的手机上的 TextView 中显示所有 Unicode 字符?

我已经尝试过特殊字符,例如 '\u0279',我得到了类似 box(默认字符)的东西。 这是基于 l10n 和 i18n 设置吗?

【问题讨论】:

  • 您是在 Strings.xml 文件中添加这些字符吗?
  • 假设我想做从 (utf8) 数字(例如 0279)到 (utf8) char '\u0279' 的简单转换。所以我有EditText,用户在其中写下数字和TextView,这些数字在其中转换为字符。按一个按钮就完成了变换。
  • 为此,您必须记录相应符号的所有可用字符代码。将其与记录进行比较,然后显示符号。
  • 对不起,我不明白你有记录是什么意思?您可以在答案中发布示例代码吗?
  • 抱歉记录的东西搞混了。检查我的答案。

标签: android unicode textview


【解决方案1】:
tv=(TextView)findViewById(R.id.textView1);
Typeface font= Typeface.createFromAsset(getAssets(), "TAU_BHON.TTF");
tv.setTypeface(font); 

将支持您的语言的字体放在资产文件夹中。在这种情况下,我使用了 TAU_BHON.TTF

【讨论】:

  • 我收到错误 java.lang.RuntimeException:无法启动活动 ComponentInfo{mypackage/mypackage.MyActivity}:java.lang.RuntimeException:无法制作本机字体
  • 我已成功从资产加载字体,但我仍然得到这个丑陋的盒子而不是正确的字符。
  • 你是如何确定你需要哪种字体的?
  • @McAdam331 每种字体支持不同的 unicode 字符,没有一种字体支持所有这些字符。您需要选择一个支持您要使用的字符。
  • @TristanWiley 我的问题是,如何确定支持我要使用的字符的字体?
【解决方案2】:

这通常是因为使用了字体,默认的不支持/已实现所有 unicode 字符,您需要使用像 DejaVuSans 这样的全功能字体。 ttf

@sakthi 显示了一个应该可以正常工作的示例,请检查您的 android 版本是否支持它

【讨论】:

  • 正如我提到的,我收到错误 java.lang.RuntimeException: Unable to start activity ComponentInfo{mypackage/mypackage.MyActivity}: java.lang.RuntimeException: native typeface cannot be made
  • 正确,但该示例显示:Typeface font= Typeface.createFromAsset(getAssets(), "TAU_BHON.TTF");尝试而不是仅 getAssests() 之类的 getContext().getAssests(),可能是因为无法获取上下文
  • 我已成功从资产加载字体,但我仍然得到这个丑陋的盒子而不是正确的字符。
  • 检查你使用的字体是否有你需要的字符
  • 好的,现在我正在使用 DejaVuSans.ttf,现在几乎可以完美运行(并非所有字符都按需要显示,但没关系)。谢谢
【解决方案3】:

试试这个代码:

String str = "\u00F6";

System.out.println("new value-" + str);

你会得到:

new value-ö

这是我为检查该功能而创建的示例 android 项目:

Java 文件:

package com.testd;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class Main extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        String str = "\u00F6";

        TextView tv = (TextView) findViewById(R.id.a);
        tv.setText("sajklasdklfjasdf " + str );
    }
}

XML 文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView android:id="@+id/a" android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:text="@string/hello" />
</LinearLayout>

屏幕截图:

【讨论】:

  • 没错,但问题是我的 TextView 并没有那样显示。它使用盒子而不是属性字符
  • String s = new String(str); 这一行绝对没有任何成效。它只是创建一个新的String,与s 具有相同的内容。在极少数情况下,仅采用单个 StringString 构造函数很有用。这不是其中之一。
  • 这段代码也适用于我,但如果你使用“\u2040”而不是“\u00F6”,它就不再适用了。
猜你喜欢
  • 2016-08-25
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
  • 2016-12-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-31
  • 2013-10-22
相关资源
最近更新 更多