将特定字体与Android apk集成

时间:2015-01-05 08:59:15

标签: android fonts apk

我已经构建了一个以尼泊尔(Devnagari)字体显示新闻的应用程序。 一切都很好,但问题是在某些Android手机中字体显示不正确。

这里我发布了两张图片,显示了不同手机中相同内容的变化。第一个是完美的,但第二个是错误的显示。

第一张图片,字体正确

1st Image with correct fonts

第二张图片字体不正确

2nd Image with incorrect fonts

我意识到的问题是第二部手机没有安装正确的字体。 我们怎样摆脱这个问题?

我对此没有任何正确的想法,但我想到的一个解决方案是 - 如果我们将必要的字体与apk文件集成,并且字体也会随apk下载。

请通过我的建议,并希望知道如何实施任何存在的解决方案。

2 个答案:

答案 0 :(得分:1)

如果您使用的是原生Android Textview组件,则可以使用以下方法:

public void setTypeface (Typeface tf)

以这种方式创建字体:

static Typeface  createFromAsset(AssetManager mgr, String path)
Create a new typeface from the specified font data.

Typeface.createFromAsset(getAssetManager(),"RELATIVE_PATH_TO_YOUR_TYPFACE_IN_THE_ASSET_FOLDER");

如果您使用的是Android Studio,则应在src / main / assets。

下创建资产文件夹

答案 1 :(得分:1)

在名为“fonts”的资源中创建1个文件夹,将您的字体文件放在该文件夹中。例如见下图

enter image description here

import android.graphics.Typeface;

然后声明字体对象

Typeface allFontType, allFontTypeNormal, allFontTypeLight;

try 
{
    allFontType         = Typeface.createFromAsset(getApplicationContext().getAssets(), "fonts/Dosis-Bold.ttf");
    allFontTypeNormal   = Typeface.createFromAsset(getApplicationContext().getAssets(), "fonts/Dosis-Medium.ttf");
    allFontTypeLight    = Typeface.createFromAsset(getApplicationContext().getAssets(), "fonts/Dosis-ExtraLight.ttf");
}
catch (Exception e1) 
{
    e1.printStackTrace();
    allFontType         =  Typeface.create(Typeface.SANS_SERIF, Typeface.BOLD);
    allFontTypeNormal   =  Typeface.create(Typeface.SANS_SERIF, Typeface.NORMAL);
    allFontTypeLight    =  Typeface.create(Typeface.SANS_SERIF, Typeface.NORMAL);
}


要在TextView中应用字体,请使用以下代码

TextView lblDaysName = (TextView)view.findViewById(R.id.lblDaysName);
lblDaysName.setTypeface(allFontTypeNormal);