Android - 使用自定义字体
我将自定义字体应用于 TextView
,但它似乎并没有改变字体。
这是我的代码:
Typeface myTypeface = Typeface.createFromAsset(getAssets(), "fonts/myFont.ttf");
TextView myTextView = (TextView)findViewById(R.id.myTextView);
myTextView.setTypeface(myTypeface);
任何人都可以让我摆脱这个问题吗?
I applied a custom font to a TextView
, but it doesn't seems to change the typeface.
Here is my code:
Typeface myTypeface = Typeface.createFromAsset(getAssets(), "fonts/myFont.ttf");
TextView myTextView = (TextView)findViewById(R.id.myTextView);
myTextView.setTypeface(myTypeface);
Can anyone please get me out of this issue?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(21)
在 Mobiletuts+ 上有关于 Android 文本格式化的非常好的教程。 快速提示:自定义 Android字体
编辑:现在自己测试一下。这是解决方案。您可以使用名为 fonts 的子文件夹,但它必须位于
assets
文件夹中,而不是位于res
文件夹中。所以还要确保字体结尾我的意思是字体文件本身的结尾都是小写的。换句话说,它不应该是
myFont.TTF
而是myfont.ttf
这种方式必须是小写On Mobiletuts+ there is very good tutorial on Text formatting for Android. Quick Tip: Customize Android Fonts
EDIT: Tested it myself now. Here is the solution. You can use a subfolder called fonts but it must go in the
assets
folder not theres
folder. SoAlso make sure that the font ending I mean the ending of the font file itself is all lower case. In other words it should not be
myFont.TTF
butmyfont.ttf
this way must be in lower case在尝试了本线程中描述的大多数解决方案后,我意外地发现了 Calligraphy (https://github.com/chrisjenx/Calligraphy) - Christopher Jenkins 的一个库,可让您轻松地将自定义字体添加到您的应用程序中。与此处建议的方法相比,他的库的优点是:
After trying most of the solutions described in this thread, I accidentally found Calligraphy (https://github.com/chrisjenx/Calligraphy) - a library by Christopher Jenkins that lets you easily add custom fonts to your app. The advantages of his lib comparing to approaches suggested here are:
我知道已经有了很好的答案,但这里有一个完全有效的实现。
这是自定义文本视图:
这是自定义属性。这应该转到您的
res/attrs.xml
文件:以下是如何使用它。我将使用相对布局来包装它并显示
customAttr
声明,但它显然可以是您已有的任何布局。I know there are good answers already, but here's a fully working implementation.
Here's the custom text view:
Here's the custom attributes. This should go to your
res/attrs.xml
file:And here's how you use it. I'll use a relative layout to wrap it and show the
customAttr
declaration, but it could obviously be whatever layout you already have.如果您将字体放置在正确的位置并且字体文件本身没有错误,您的代码应该像那样工作,RATTLESNAKE。
但是,如果您可以在布局 xml 中定义字体,就会容易得多,如下所示:
使用随附的
res/values/styles.xml
:我专门为此创建了几个工具目的。请参阅 GitHub 上的此项目,或者查看此博客文章解释了整个事情。
Provided that you placed the font in the right place and there is no error in the font file itself, your code should work like that, RATTLESNAKE.
However, it would be a lot easier if you could just define a font in your layout xml, like this:
With the accompanying
res/values/styles.xml
:I created a couple of tools specifically for this purpose. Refer to this project from GitHub, or take a look at this blog post which explains the whole thing.
从 Android O 预览版来看,最好的方法是这样:
仅当您有 android studio-2.4 或更高版本时才有效
将出现“资源目录”窗口。
R.font.dancing_script
、R.font.la_la
和R.font.ba_ba
。接下来我们必须创建一个字体系列:
将每个字体文件、样式和粗细属性包含在字体标记元素中。以下 XML 说明了在字体资源 XML 中添加与字体相关的属性:
将字体添加到 TextView:
如文档所示
所有步骤都是正确的。
The best way to do it From Android O preview release is this way:
It works only if you have android studio-2.4 or above
Resource Directory window appears.
R.font.dancing_script
,R.font.la_la
, andR.font.ba_ba
.Next we must create a font family:
Enclose each font file, style, and weight attribute in the font tag element. The following XML illustrates adding font-related attributes in the font resource XML:
Adding fonts to a TextView:
As from the documentation
All the steps are correct.
我以前已经成功地使用过这个。我们的实现之间的唯一区别是我没有在资产中使用子文件夹。但不确定这是否会改变什么。
I've successfully used this before. The only difference between our implementations is that I wasn't using a subfolder in assets. Not sure if that will change anything, though.
对于 Android 中的自定义字体,在资产文件夹中创建一个文件夹,将其命名为“fonts”,将所需的 fonts.ttf 或 .otf 文件放入其中。
如果扩展 UIBaseFragment:
否则如果扩展 Activity:
For Custom Fonts in android create a folder within assets folder name it "fonts" place your desired fonts.ttf or .otf file in it.
If you extends UIBaseFragment:
else if extends Activity:
您可以使用 PixlUI https://github.com/neopixl/PixlUI
导入其 .jar 并使用它在 XML 中
You can use PixlUI at https://github.com/neopixl/PixlUI
import their .jar and use it in XML
由于我对 SO 上提出的所有解决方案都不满意,所以我提出了我的解决方案。它基于标签的一个小技巧(即你不能在代码中使用标签),我将字体路径放在那里。因此,在定义视图时,您可以这样做:
或这样:
现在您可以显式访问/设置视图为:
或仅通过以下方式设置所有内容:
您问的魔术类是什么?大部分是从另一个 SO 帖子中粘贴过来的,带有用于活动和片段的辅助方法:
Since I was not satisfied with all the presented solutions on SO, I've come up with mine. It's based on a little trick with tags (i.e. you can't use tags in your code), I put the font path there. So when defining views, you can do either this:
or this:
Now you can either explicitly access / setup the view as:
or just setup everything via:
And what is the magic class you ask? Mostly glued from another SO posts, with helper methods for both activity and fragments:
不幸的是,对此没有好的解决方案。
我看过很多关于使用自定义 TextView 的文章,但他们忘记了,不仅仅是 textview 可以实现字体和文本视图。有些文本视图隐藏在开发人员无法访问的其他视图中;我什至不打算开始使用 Spannable。
您可以使用外部字体实用程序,例如:
书法字体工具
BUT 此循环在应用程序创建时的每个视图上,甚至这个实用程序会错过一些视图(ViewPager 呈现正常字体),那么您就会遇到问题,当 Google 更新其构建工具时,这偶尔会崩溃,因为它需要针对已弃用的属性。由于它使用Java 的反射,所以速度也有点慢。
谷歌确实需要解决这个问题。我们需要 Android 中更好的字体支持。如果你看看 iOS 的解决方案,他们实际上有 100 种内置字体可供选择。想要自定义字体吗?只需放入 TFF 即可使用。
目前,我们仅限于 Google 为我们提供的产品,该产品非常有限,但幸运的是针对移动设备进行了优化。
Unfortunately there is no good solution for this.
I've seen the many articles about using a custom TextView but what they forget it that it's not only textviews that can implement fonts & there are textviews hidden away in other views inaccessible to the developer; I'm not even going to get started on Spannable.
You could use an external font utility like:
Calligraphy Font Tool
BUT This loops over every view in the application on it's creation and even this utility misses some views (ViewPager renders normal font) then you have the problem that is when Google updates their build tools this will occasionally crash because it needs to target deprecated properties. It's also a little slow as it uses Java's Reflection.
It's really up to Google to fix this. We need better font support in Android. If you look at the solution from iOS they literally have 100's of fonts built in to select from. Want a custom font? Simply drop a TFF in and it's usable..
For now were now limited to the offering that Google offers us which is extremely limited but fortunately mobile optimized.
确保在调用 super 和 setContentView() 后将上述代码粘贴到 onCreate() 中。这个小细节让我挂断了一段时间。
Make sure to paste the above code into onCreate() after your call to the super and the call to setContentView(). This small detail kept my hung up for awhile.
在 Android 8.0 中,通过
可下载字体
,在应用程序中使用自定义字体变得更加容易。我们可以将字体直接添加到项目文件夹中的
res/font/ 文件夹
中,这样,这些字体就会在 Android Studio 中自动可用。现在将
fontFamily
属性设置为字体列表,或者单击“更多”并选择您选择的字体。这将向您的 TextView 添加tools:fontFamily="@font/your_font_file"
行。这将自动生成一些文件。< /strong>
1. 在值文件夹中它将创建
fonts_certs.xml
。2. 在清单中它将添加以下行:
3.
preloaded_fonts.xml
With Android 8.0 using Custom Fonts in Application became easy with
downloadable fonts
.We can add fonts directly to the
res/font/ folder
in the project folder, and in doing so, the fonts become automatically available in Android Studio.Now set
fontFamily
attribute to list of fonts or click on more and select font of your choice. This will addtools:fontFamily="@font/your_font_file"
line to your TextView.This will Automatically generate few files.
1. In values folder it will create
fonts_certs.xml
.2. In Manifest it will add this lines:
3.
preloaded_fonts.xml
您可以使用简单&简单的 EasyFonts 第三方库,为您的
TextView< 设置各种自定义字体/代码>。通过使用这个库,您不必担心下载字体并将其添加到资产/字体文件夹中。还有关于 Typeface 对象的创建。
而不是
简单地:
该库还提供以下字体。
You can use easy & simple EasyFonts third party library to set variety of custom fonts to your
TextView
. By using this library you should not have to worry about downloading and adding fonts into the assets/fonts folder. Also about Typeface object creation.Instead of
Simply:
This library also provides following font face.
我也遇到了同样的问题,TTF 没有出现。我更改了字体文件,并且使用相同的代码它可以工作。
I had the same problem, the TTF did not show up. I changed the font file, and with the same code it's working.
如果您想从网络加载字体或轻松设置其样式,可以使用:
https://github.com/ shellum/fontView
示例:
If you want to load the font from the network or easily style it, you can use:
https://github.com/shellum/fontView
Example:
好吧,七年后,您可以使用
android.support
库 26++ 轻松更改整个应用程序textView
或您想要的内容。例如:
创建您的字体包app/src/res/font并将您的字体移入其中。
在您的应用主题中,只需将其添加为 fontFamily:
仅与
textView
一起使用的示例:并添加到您的主主题中:
目前它适用于 8.1,直到4.1 API Jelly Bean 范围很广。
Well, after seven years you can change whole app
textView
or what you want easily by usingandroid.support
libraries 26++.E.g:
Create your font package app/src/res/font and move your font into it.
And in your app theme just add it as a fontFamily:
Example for use with
textView
only:And add into your main theme:
Currently it's worked on 8.1 until 4.1 API Jelly Bean And that's a wide range.
更新答案:
Android 8.0(API 级别 26)引入了一项新功能:XML 中的字体。
只需在运行 Android 4.1(API 级别 16)及更高版本的设备上使用 XML 中的字体功能,即可使用支持库 26。
请参阅此 链接
旧答案
自定义字体有两种方法:
方法一:
反射 Typeface.class ||| 最好的方法
在继承Application的类中调用FontsOverride.setDefaultFont(),此代码将导致所有软件字体发生变化,甚至Toasts字体
AppController.java
FontsOverride.java
方式2:使用setTypeface
特殊视图只需调用setTypeface()来改变字体。
CTextView.java
FontUtils.java
Update answer:
Android 8.0 (API level 26) introduces a new feature, Fonts in XML.
just use the Fonts in XML feature on devices running Android 4.1 (API level 16) and higher, use the Support Library 26.
see this link
Old answer
There are two ways to customize fonts :
Way 1 :
Refrection Typeface.class ||| best way
call FontsOverride.setDefaultFont() in class extends Application, This code will cause all software fonts to be changed, even Toasts fonts
AppController.java
FontsOverride.java
Way 2: use setTypeface
for special view just call setTypeface() to change font.
CTextView.java
FontUtils.java
从 API 26 开始,执行此操作的正确方法在此处的官方文档中进行了描述:
https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html
这涉及将 ttf 文件放入res/font 文件夹并创建一个字体系列文件。
The correct way of doing this as of API 26 is described in the official documentation here :
https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html
This involves placing the ttf files in res/font folder and creating a font-family file.
现在android支持的最简单的解决方案!
在 xml 中使用自定义字体:
查看详细信息:
https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html
The most simple solution android supported now!
Use custom font in xml:
look details:
https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html
TextView txt = (TextView) findViewById(R.id.txt_act_spalsh_welcome);
Typeface font = Typeface.createFromAsset(getAssets(), "fonts/Aramis Italic.ttf");
txt.setTypeface(font);
字体名称必须正确并且玩得开心
TextView txt = (TextView) findViewById(R.id.txt_act_spalsh_welcome);
Typeface font = Typeface.createFromAsset(getAssets(), "fonts/Aramis Italic.ttf");
txt.setTypeface(font);
name of the font must be correct and have fun
是的,正如Dipali所说,下载字体就是这么简单。
这就是你如何做到的...
TextView
。fontFamily
下拉列表。如果不存在,请找到 下的插入符号(> 并单击它以展开textAppearance
)。font-family
下拉列表。更多字体
Google Fonts
将字体添加到项目
的单选按钮奖金:
如果您想使用所选字体在应用程序中使用文本设置所有内容的样式,只需将
- @font/fontnamehere
添加到您的样式.xml
Yes, downloadable fonts are so easy, as Dipali s said.
This is how you do it...
TextView
.fontFamily
dropdown. If it isn't there, find the caret thingy (the > and click on it to expandtextAppearance
) under the.font-family
drop down.more fonts
Google Fonts
Add font to project
BONUS:
If you would like to style EVERYTHING with text in your application with chosen font, just add
<item name="android:fontfamily">@font/fontnamehere</item>
into yourstyles.xml