3

我需要以TextView印度当地语言的马拉雅拉姆字体显示。为此,我正在尝试以下代码

        Typeface custom_typerface = Typeface.createFromAsset(getAssets(), "fonts/AnjaliNewLipi.ttf");
        TextView mytext = (TextView)findViewById(R.id.mytext);
        mytext.setTypeface(custom_typerface);
        mytext.setText("മലയാള ഭാഷ തന്‍ ഭാവ ശുദ്ധി...");

这在 4.2 设备上正确显示,但并非在所有设备上都能正确显示。如何为所有 android 设备渲染它?任何帮助将不胜感激。

4

4 回答 4

2

上面的代码是正确的,它应该显示马拉雅拉姆字体。但是有一个问题!如果您的手机不支持该字体,它不会显示马拉雅拉姆语,而是会显示一些框。

如果您使用任何文件浏览器并查看系统/系统/字体 - 您将看到设备支持的所有字体。

如果您想添加新字体,您也可以这样做,但设备必须为此扎根。许多便宜的手机只支持几种字体,但昂贵的手机却支持多种字体。

于 2013-04-30T11:57:41.803 回答
0

将自定义字体设置为 TextView。

你有两种方式,先看第一种方式:

1.将您的字体文件添加到资产文件夹,如果不存在资产文件夹创建它。

2、创建CustomTypeface类,例如:

import android.content.Context;
import android.content.res.AssetManager;
import android.graphics.Typeface;

public class CustomTypeface {

    private static Typeface typefaseArialCondIt;
    private static Typeface typefaseArialBold;
    private static Typeface typefaseArialRegular;

    public CustomTypeface() {
    }

    public CustomTypeface(Context context) {
        AssetManager assets = context.getAssets();
        CustomTypeface.typefaseArialCondIt = Typeface.createFromAsset(assets, "fonts/ArialCondIt.otf");
        CustomTypeface.typefaseArialBold = Typeface.createFromAsset(assets, "fonts/ArialBold.otf");
        CustomTypeface.typefaseArialRegular = Typeface.createFromAsset(assets, "fonts/ArialRegular.otf");
    }

    public static Typeface gettypefaseArialCondIt() {
        return typefaseArialCondIt;
    }

    public static Typeface settypefaseArialCondIt(Typeface typefaseArialCondIt) {
        return CustomTypeface.typefaseArialCondIt = typefaseArialCondIt;;
    }

    public static Typeface gettypefaseArialBold() {
        return typefaseArialBold;
    }

    public static Typeface settypefaseArialBold(Typeface typefaseArialBold) {
        return CustomTypeface.typefaseArialBold = typefaseArialBold;;
    }

    public static Typeface gettypefaseArialRegular() {
        return typefaseArialRegular;
    }

    public static void settypefaseArialRegular(Typeface typefaseArialRegular) {
        CustomTypeface.typefaseArialRegular = typefaseArialRegular;
    }
}

3.并将自定义字体设置为TextView:

TextView yourTextView = (TextView) findViewById(R.id.textView1);
yourTextView.setTypeface(CustomTypeface.gettypefaseArialRegular);

或者第二种方法,使用您的字体创建自定义 TextView:

import android.content.Context;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.widget.TextView;

public class ArialTextView extends TextView {

    public ArialTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
    public ArialTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public ArialTextView(Context context) {
        super(context);
    }

    @Override
    public void setTypeface(Typeface tf, int style) {
        if (style == Typeface.BOLD) {
            setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/ArialBold.otf"));
        } else if (style == Typeface.NORMAL) {
            setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/ArialRegular.otf"));
        } else if (style == Typeface.ITALIC) {
            setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/ArialCondIt.otf"));
        }
    }
}

并且在布局 xml 中您可以创建自定义 TextView,例如:

<com.your.package.ArialTextView
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:textAppearance="?android:attr/textAppearanceMedium"
     android:text="TextView with your custom font"/>
于 2013-04-28T04:47:32.787 回答
0

经过长时间的搜索,我终于找到了答案。我将 Unicode 字体转换为 Ascii,用 Ascii 替换每个 Unicode 字符。这是神奇的代码

mytext.replaceAll("oldChar", "newChar");

对每个字符使用此代码。:)

于 2013-04-27T10:43:01.763 回答
0

我不确定这是否适用于您的情况,但我使用的是旁遮普字体。我所做的不是复制或将文本输入到字符串中,然后使用字体。您当然确实使用了该字体,但为了使其正常工作,您需要在音译中输入马拉雅拉姆语文本,即如下面的印地语示例,因为我不知道马拉雅拉姆语。

PUl

 Typeface custom_typerface = Typeface.createFromAsset(getAssets(), "fonts/AnjaliNewLipi.ttf");
    TextView mytext = (TextView)findViewById(R.id.mytext);
    mytext.setTypeface(custom_typerface);
    mytext.setText("PUl"); //Assuming you know Hindi PUl in hindi is फूल

这将以正确的格式显示文本,没有问题但是如果您只是输入

mytext.setText("फूल");  

它很有可能无法正确呈现字体。我希望这有帮助。:)

于 2013-08-22T02:49:05.413 回答