【问题标题】:Android 2.x devanagari unicode issueAndroid 2.x 梵文 unicode 问题
【发布时间】:2014-10-01 00:49:40
【问题描述】:

我正在尝试使用以下代码支持 android 2.x 的天城字体(即使 android 2.x 无法呈现天城字体)。代码运行良好,除了 'raswa' 和 'dirga' 存在一些问题。是否有可能在 android 2.x 中获得正确的梵文表示?

Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/mangal.ttf");
TextView txtviewword=(TextView) findViewById(R.id.textViewWord);
txtviewword.setTypeface(typeface);

这是不正确的表示(来自 android 2.3):

这应该是这样的(从android 4.4开始):

【问题讨论】:

  • 你的意思是相同的代码在 2 个设备中的表示方式不同?
  • 是的。部分原因是 android 2.x 无法正确呈现梵文字体。
  • 我认为它来自名声...任何替代 ttf?
  • 切换ttf也不行。
  • 复杂的布局渲染需要文本布局引擎支持:据我所知,你要么提供自己的不知道在哪里,要么放弃。

标签: java android unicode


【解决方案1】:

在分析了我对这个问题的情况后,我发现将“raswa”的位置与字母表(“akshar”)交换本身就可以解决姜饼的问题。所以,我交换了“raswa”和字母的位置。因此,这提供了问题解决方法。

if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
   char[] array = content[1].toCharArray();   /*content[1] is a string containing the original version */
   for(int i=0; i<array.length; i++){
        char c = array[i];
        int code = (int) c;
        if (code == 2367){    //2367 is int value for 'raswa'
            char temp = array[i-1];
            array[i-1]=c;
            array[i]=temp;
        }
    }
    String str = String.copyValueOf(array); /*This string contains the swapped version(symantically its wrong, though. It's works as my solution.)*/
    Log.d("DetailActivity", "from gingerbread");
    Log.d("DetailActivity", str);
    if(!content[1].equals(null))txtviewdevanagari.setText(str);
}else{
    Log.d("DetailActivity", "from ICS+");
    if(!content[1].equals(null))txtviewdevanagari.setText(content[1]);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    相关资源
    最近更新 更多