Android Tamil字体在英语单词之间

时间:2012-05-17 12:11:22

标签: android textview android-fonts tamil

我有一个TextView,其间有一个巨大的文字我有一个泰米尔语单词,我知道如何在单独的textview中嵌入泰米尔语字。但我需要英语单词之间的泰米尔语单词请提前帮助谢谢

我在textview中的部分文字:

  

Kolam使用欢迎(நல்வரவு)等季节性消息。   有时候在寺庙里做志愿者在寺庙里画kolam   奉献者的

4 个答案:

答案 0 :(得分:5)

尝试通过setTypeface将此Akshar.ttf字体设置为TextView,它同时支持英语和泰米尔语。


结果如下:

enter image description here

或者,寻找支持这两种语言的类似字体。


你的第二个解决方案是使用 SpannableStringBuilder 将图像用于这个小泰米尔文本部分。


将自定义字体设置为TextView的代码:

假设您在资源文件夹下的字体文件夹中有 Akshar.ttf 字体:

 Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/Akshar.ttf");               
    TextView tv = (TextView) findViewById(R.id.CustomFontText);
    tv.setTypeface(tf);
    tv.setText("Seasonal messages like welcome (நல்வரவு) is used in Kolam. Volunteering to draw kolam at temple is sometimes done when a devotee's");

答案 1 :(得分:2)

如果您想在TextView中支持多种字体,但在单个ttf中不支持它们,还有另一种解决方案:

使用以下代码:(我使用的是Bangla和Tamil字体)

  TextView txt = (TextView) findViewById(R.id.custom_fonts);  
        txt.setTextSize(30);
        Typeface font = Typeface.createFromAsset(getAssets(), "Akshar.ttf");
        Typeface font2 = Typeface.createFromAsset(getAssets(), "bangla.ttf");   
        SpannableStringBuilder SS = new SpannableStringBuilder("আমারநல்வரவு");
        SS.setSpan (new CustomTypefaceSpan("", font2), 0, 4,Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
        SS.setSpan (new CustomTypefaceSpan("", font), 4, 11,Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
        txt.setText(SS);

结果是:

enter image description here


CustomTypefaceSpan类:

package my.app;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.text.TextPaint;
import android.text.style.TypefaceSpan;

public class CustomTypefaceSpan extends TypefaceSpan {

private final Typeface newType;

public CustomTypefaceSpan(String family, Typeface type) {
    super(family);
    newType = type;
}

@Override
public void updateDrawState(TextPaint ds) {
    applyCustomTypeFace(ds, newType);
}

@Override
public void updateMeasureState(TextPaint paint) {
    applyCustomTypeFace(paint, newType);
}

private static void applyCustomTypeFace(Paint paint, Typeface tf) {
    int oldStyle;
    Typeface old = paint.getTypeface();
    if (old == null) {
        oldStyle = 0;
    } else {
        oldStyle = old.getStyle();
    }

    int fake = oldStyle & ~tf.getStyle();
    if ((fake & Typeface.BOLD) != 0) {
        paint.setFakeBoldText(true);
    }

    if ((fake & Typeface.ITALIC) != 0) {
        paint.setTextSkewX(-0.25f);
    }

    paint.setTypeface(tf);
}
}

Reference

答案 2 :(得分:2)

我在Android 4.0中遇到过这个问题。 我发现这是由于csc(国家代码)。 如果它是印度,那么泰米尔人正常工作,否则就无法工作。 我可以证实这一点。

答案 3 :(得分:2)

直到ICS(4.0)Android系统中没有可用的Tamil字体。即便如此,它还有虫子,谷歌用Jelly Bean(4.2)修复了它。

现在,如果你想在你的应用程序中显示泰米尔语,你需要使用TAB,TAM,BAMINI或TSCII编码。

我写了simple library that does the conversion for you dynamically。您只需编写简单的代码,如下所示。

// Initialise the Typeface (assumes TSCII, Bamini, Anjal, TAB or TAM font located inside assets/fonts folder)
Typeface tf = Typeface.createFromAsset(getAssets(),"fonts/mylai.ttf");
// Initialises the TextView
TextView tv = (TextView)findViewById(R.id.textView1);
//Setting the Typeface
tv.setTypeface(tf);
//Magic happens here ;) encoding conversion
String TSCIIString = TamilUtil.convertToTamil(TamilUtil.TSCII, "வணக்கம் அன்ரொயிட்");
//Setting the new string to TextView
tv.setText(TSCIIString);

我已在此topic in this answer. Please check it out too.

上写了更多内容