如何强制应用程序使用默认字体?就像Gmail应用程序一样?

3
我希望在我的Android应用程序中使所有TextView使用Android的默认字体(ICS中为Roboto,旧版本中为其他字体)。用户从系统设置更改字体时,字体不应更改。这个是否可能?我尝试在应用程序主题中将字体设置为正常,但没有起作用。但当我尝试使用monospace时,它起作用了。我不想在我的包中包含任何字体文件。我曾在ICS中看到GMail应用程序这样做。他们是如何做到的?

2
我发现在处理字体时,不同设备之间存在一些不一致性。我的猜测是,如果你希望在所有设备上都能正常工作,你需要在你的包内(assets中)包含字体文件的副本。 - FoamyGuy
3个回答

2
您可以扩展TextView对象,并重写构造函数以强制字体类型:
    Typeface type = Typeface.createFromAsset(getAssets(),"fonts/Kokila.ttf"); 
    this.setTypeface(type);

2
@Stefano Ortisi提供的解决方案是完全错误的。您在应用程序中使用自定义字体的唯一方法是将其放置在资产目录中并从那里访问它:
Typeface tf = Typeface.createFromAsset(this.getAssets(), "fonts/CUSTOMFONT.tff");
TextView tv = (TextView) findViewById(R.id.TEXTVIEW_ID);
tv.setTypeface(tf); 

以下是支持我的观点的链接:

在Android中使用自定义字体

有一个类似的帖子与此问题相关。在尝试上述帖子中给出的解决方案之前,请检查此链接:

自定义字体错误


你的代码片段中缺少一个基本的setTypeFace调用。 - Giulio Piancastelli

1

只需在您的应用程序中使用该主题。 您可以从AndroidManifest.xml中设置它

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" android:theme="@style/YourCustomTheme">

然后您需要在style.xml文件中创建自定义主题


<style name="YourCustomTheme" >
     <item name="android:typeface">yourcustomfont</item>
</style>

1
@Stefano Ortisi 你曾经实现过你所提供的解决方案吗? - Arun George
@ArunGeorge 没问题。你可以查看这个小的示例项目:https://dl.dropbox.com/u/6102128/FontTest.zip - Stefano Ortisi
检查了项目,如我所说,“自定义字体”只能通过编程方式使用。您在项目的style.xml中使用的字体“serif”是内置字体之一。因此,您并没有使用自定义字体,而只是Android内置字体。因此,当您说 <item name="android:typeface">yourcustomfont</item> 时完全错误,实际上应该是 <item name="android:typeface">AndroidBuildInFonts</item> - Arun George
2
我想强制使用默认字体,而不想包含ttf文件。默认字体是指已经安装在设备上的字体。 - Sudarshan Bhat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接