我已经构建了一个以尼泊尔(Devnagari)字体显示新闻的应用程序。 一切都很好,但问题是在某些Android手机中字体显示不正确。
这里我发布了两张图片,显示了不同手机中相同内容的变化。第一个是完美的,但第二个是错误的显示。
第一张图片,字体正确
第二张图片字体不正确
我意识到的问题是第二部手机没有安装正确的字体。 我们怎样摆脱这个问题?
我对此没有任何正确的想法,但我想到的一个解决方案是 - 如果我们将必要的字体与apk文件集成,并且字体也会随apk下载。
请通过我的建议,并希望知道如何实施任何存在的解决方案。
答案 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个文件夹,将您的字体文件放在该文件夹中。例如见下图
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);