【发布时间】:2012-11-12 10:40:17
【问题描述】:
我开发了一个安卓项目。在这个项目中,文本字体默认为 android:sans。
现在我想将整个项目的默认文本字体替换为roboto字体。
我该怎么做?
【问题讨论】:
我开发了一个安卓项目。在这个项目中,文本字体默认为 android:sans。
现在我想将整个项目的默认文本字体替换为roboto字体。
我该怎么做?
【问题讨论】:
您可以从这里下载 Roboto 字体: https://fonts.google.com/specimen/Roboto。 [2020-01-28 更新]
您可以通过使用TypeFace 以常规方式执行此操作,如下所示:
Typeface typeface = Typeface.createFromAsset(getAssets(), fontName);
textView.setTypeface(typeface);
注意:上述操作必须在每个Activity 中完成。
或者,例如,如果您想将 Roboto 字体应用到应用程序中的所有 TextViews,那么您将需要创建自己的扩展 TextView 的小部件。
有一种简单的方法可以做到这一点。按照这个答案的步骤操作:https://stackoverflow.com/a/9199258/450534(解决方案的完整道具leocadiotine。我以前用过它,它就像一个魅力)
编辑:将your_namespace 视为一个标记,供您为其命名。例如,在 XML 中集成 Admob 时,我使用 xmlns:ads。例如,您可以使用:xmlns:font 或其他描述性内容。
至于custom.ttf 代表什么,它基本上是您需要复制到Assets 文件夹中的带有扩展名的字体文件。例如,如果您使用 ROBOTO-REGULAR.TTF,则将 custom.ttf 替换为 ROBOTO-REGULAR.TTF。使用此示例,整个代码应如下所示:
<your.package.widget.TypefacedTextView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:font="http://schemas.android.com/apk/res/your.package"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Custom fonts in XML are easy"
android:textColor="#FFF"
android:textSize="14dip"
font:typeface="ROBOTO-REGULAR.TTF" />
【讨论】:
platforms/android-X/data/fonts/ 中找到字体(如果我没记错的话)。
android:textStyle="...." 属性将被忽略。要使其粗体,您需要使用粗体版本的 .ttf / .otf 字体文件。然而,Trykker 字体只有普通版本,没有其他变体。
Download 并解压Roboto 字体压缩文件
如果您还没有assets 文件夹,请在您的项目中创建一个文件夹。我假设您正在使用 Android Studio,这是如何做到的。
在assets文件夹中新建一个目录,命名为font。
打开您解压缩的文件并复制您选择的字体样式。您的字体文件夹应如下所示:
您现在可以在应用中的任何位置使用此字体,如下所示:
Typeface roboto = Typeface.createFromAsset(context.getAssets(),
"font/Roboto-Bold.ttf"); //use this.getAssets if you are calling from an Activity
txtView.setTypeface(roboto);
【讨论】:
txtView = (TextView) findViewById(R.id.txtView);
Typeface myTypeface = Typeface.createFromAsset(
this.getAssets(),
"font/Robot.otf");
txtView.setTypeface(myTypeface);
【讨论】:
您可以使用Typerlib 轻松做到这一点。
这个库包含了在你的文件中添加字体资源的复杂性 项目和回收那些最近创建的字体以最大化 您的应用的性能。
将此添加到您的build.gradle
dependencies {
compile 'com.elmargomez.typer:typerlib:1.0.0'
}
然后就可以使用字体了
TextView txtView1 = (TextView) findViewById(R.id.yourTxtView1);
TextView txtView2 = (TextView) findViewById(R.id.yourTxtView2);
TextView txtView3 = (TextView) findViewById(R.id.yourTxtView3);
TextView txtView4 = (TextView) findViewById(R.id.yourTxtView4);
txtView1.setTypeface(Typer.set(yourContext).getFont(Font.ROBOTO_REGULAR));
txtView2.setTypeface(Typer.set(yourContext).getFont(Font.ROBOTO_CONDENSED_ITALIC));
txtView3.setTypeface(Typer.set(yourContext).getFont(Font.ROBOTO_THIN));
txtView4.setTypeface(Typer.set(yourContext).getFont(Font.ROBOTO_BOLD));
它包括 Roboto 中所有当前的字体 ,喜欢:
Font.ROBOTO_MEDIUM
Font.ROBOTO_REGULAR
etc.
要查看所有可用的字体,请使用 Android Studio 自动完成在类 Font 之后按 Ctrl + space。
【讨论】:
关于Typeface.createFromAsset() 函数的用法的补充说明。当我接到很多电话时,它显着影响了充气时间。为了克服这个问题,我们像这样创建了Typeface 的单例实例
public static Typeface getTypeFace() {
if (fromAsset == null) {
fromAsset = Typeface.createFromAsset(getContext().getAssets(), "fonts/Roboto-Medium.ttf");
}
return fromAsset;
}
【讨论】: