-
Android字体
2011-06-03 15:19:00Android字体简介 Android系统默认支持三种字体,分别为:“sans”,“serif”,“monospace”。 android.graphic.typeface字体类: 本类的常量静态定义,首先为字体类型(typeface)名称 TypefaceDEFAULT ...Android字体简介
Android系统默认支持三种字体,分别为:“sans”,“serif”,“monospace”。
android.graphic.typeface字体类:
本类的常量静态定义,首先为字体类型(typeface)名称
TypefaceDEFAULT
Typeface DEFAULT_BOLD
Typeface MONOSPACE
TypefaceSANS_SERIF
Typeface SERIF
字体风格(style)名称
intBOLD
int BOLD_ITALIC
int ITALIC
int NORMAL设置TextView的字体可以通过TextView中的setTypeface方法来指定一个Typeface对象,因为Android的字体类
比较简单,我们列出所有成员方法:
-
staticTypeface create(Typeface family, int style)//静态方法,参数一为字体类型这里是Typeface的静态定义,如宋体,参数二风格,如粗体,斜体
-
staticTypeface create(String familyName, int style)//静态方法,参数一为字体名的字符串,参数二为风格同上,这里我们推荐使用上面的方法。
-
staticTypeface createFromAsset(AssetManager mgr, String path)//静态方法,参数一为AssetManager对象,主要用于从APK的assets文件夹中取出字体,参数二为相对于Android工程下的assets文件夹中的外挂字体文件的路径。
-
staticTypeface createFromFile(File path)//静态方法,从文件系统构造一个字体,这里参数可以是sdcard中的某个字体文件
-
staticTypeface createFromFile(String path) //静态方法,从指定路径中构造字体
-
staticTypeface defaultFromStyle(int style) //静态方法,返回默认的字体风格
-
intgetStyle() //获取当前字体风格
-
finalboolean isBold() //判断当前是否为粗体
-
finalboolean isItalic() //判断当前风格是否为斜体
例程:
1http://blog.csdn.net/wonderful19891024/archive/2010/11/24/6033304.aspx
2http://www.eoeandroid.com/thread-536-1-1.html
Android字体工作原理
android字体由android 2D图形引擎skia实现,并在Zygote的Preloading classes中对系统字体进行load。相关 文件有:skTypeface.cpp和skFontHost_android.cpp,其中后者是skia针对android平台字体实现的port。主要的 变量有: struct FontInitRec { const char* fFileName; const char* const* fNames; // null-terminated list }; struct FamilyRec { FamilyRec* fNext; SkTypeface* fFaces[5]; }; uint32_t gFallbackFonts[SK_ARRAY_COUNT(gSystemFonts)+1]; load_system_fonts()@skFontHost_android.cpp load系统中所有的字体并给每种字体分配唯一的ID, 并将字体分为两种:FamilyFonts和FallbackFonts,skPaint通过应用程序设置的字体(Typeface)所 对应的ID最终实现字符的显示。
替换Android默认的汉字字体
在android系统中,DroidSans是默认字体,只包含西方字符,应用程序默认情况下都会调用它,而 DroidSansFallback包含了东亚字符,当需要显示的字符在DroidSans字体中不存在(如:汉字)时,即 没有对应编码的字符时,系统会到DroidSansFallback中去找相应编码的字符,如果找到,则使用 DroidSansFallback字体来显示它,如果仍找不到该编码对应的字符,则无法在屏幕上显示该字符。更换 默认中文字体的步骤为:
1)将幼圆字体库youyuan.ttf重命名为DroidSansFallback.ttf,覆盖Android源码中frameworks/base/data/fonts目录下的DroidSansFallback.ttf文件;
2)重新编译Android系统;
3)编译SDK。生成的SDK中,android默认的中文字体已更换为幼圆字体。该方法的不足是删除了Android系统原来的中文字体。
为android系统添加一种默认字体,类似“sans”,“serif”,“monospace”
在android系统中,默认的中文字体只有一种:DroidSansFallback.ttf,如果想在android应用程序中随意设 置想要的中文字体,除了在应用程序中通过assets目录引入字体文件外,还可以通过增加android默认字体 的方式来实现。添加步骤大致如下: 1)在frameworks/base/data/fonts目录下添加字体文件,例如Driod-kaishu.ttf; 2)在skia中增加楷书这一字体,需要修改的文件主要有skFontHost.cpp、skTypeface.cpp、Typeface.java等; 3)在java层添加楷书字体相关API,需要修改的文件主要有typeface.java和textview.java; 4)编译SDK5)将新生成的sdk导入eclipse,在eclipse中即可通过setTypeface(Typeface.KAISHU)和 android:typeface=(“kaishu”)两种方式设置自己添加的字体。 以增加楷书字体为例: ==========main.xml=====================
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#f3243646"
>
<TextView
android:id="@+id/TextView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/normal"
android:typeface="normal"
android:textSize="25px"
/>
<TextView
android:id="@+id/TextView2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/sans"
android:typeface="sans"
android:textSize="25px"
/>
<TextView
android:id="@+id/TextView3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/serif"
android:typeface="serif"
android:textSize="25px"
/>
<TextView
android:id="@+id/TextView4"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/monospace"
android:typeface="monospace"
android:textSize="25px"
/>
<TextView
android:id="@+id/TextView5"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/kaishu"
android:typeface="kaishu"
android:textSize="25px"
/>
</LinearLayout>
==============String.xml=====================
<?xmlversion="1.0"encoding="utf-8"?>
<resources>
<stringname="normal">(normal)字体测试!!!TypefacesTest!!!</string>
<stringname="app_name">Typefaces4</string>
<stringname="kaishu">(kaishu)字体测试!!!TypefacesTest!!!</string>
<stringname="sans">(sans)字体测试!!!TypefacesTest!!!</string>
<stringname="serif">(serif)字体测试!!!TypefacesTest!!!</string>
<stringname="monospace">(monospace)字体测试!!!TypefacesTest!!!</string>
</resources>
==============Typefaces4.java=====================
packagecom.cy.Typefaces4;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.widget.TextView;
publicclassTypefaces4 extendsActivity{
/**Called when the activity is first created. */
@Override
publicvoidonCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
结果图如下:
需要注意的是,在一个TextView里的所有字符只能设置成一种字体,比如说textview.settext(“字体测试!!!TypefacesTest!!!”)中的所有字符只能被设置成同一种字体,如果想将“字体测试!!!”设置为楷书,而“TypefacesTest!!!”设置为sans就必须将这两段字符用两个TextView显示,并对各自的字体分别进行设置。
==============main.xml=============
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffffff"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/kaishu"
android:textSize="30px"
android:textColor="#ff000000"
android:typeface="kaishu"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/sans"
android:textSize="30px"
android:textColor="#ff000000"
android:typeface="sans"
/>
</LinearLayout>
效果图如下:
-
-
android 字体
2014-08-31 09:19:53key_letter_ratio // 全键盘字母字体大小 key_large_letter_ratio // 数字键盘前的数字字体大小 key_label_ratio // 全键盘第四行?123,done,= key_large_label_ratio // 数字键盘的next键字符字体大小 ke在android_4.1\packages\inputmethods\LatinIME下为android原生键盘的英文输入法文件夹
修改LatinIME内的dimens.xm中下面的key调整为下面的值(值越小,字越小)
key_letter_ratio // 全键盘字母字体大小
key_large_letter_ratio // 数字键盘前的数字字体大小
key_label_ratio // 全键盘第四行?123,done,=<键的字符字体大小
key_large_label_ratio // 数字键盘的next键字符字体大小
key_hint_letter_ratio// 全键盘第一行上面的数字的字体大小key_hint_label_ratio// 数字键盘后面的abc等label的字体大小
ttf
/system/fonts/ 其中的ttf文件都是字库 对于源码/frameworks/data/fonts/下的字体文件
DroidSans-Bold.ttf 粗体的无衬线字体(拉丁字母等)
DroidSans.ttf 常规的无衬线字体(拉丁字母等)
DroidSansFallback.ttf 常规的无衬线字体(中文字符等,一般换字库就是替换此文件)
DroidSansMono.ttf 等宽的无衬线字体(拉丁字母等)
DroidSerif-Bold.ttf 粗体的衬线字体(拉丁字母等)
DroidSerif-BoldItalic.ttf 粗体+斜体的衬线字体(拉丁字母等)
DroidSerif-Italic.ttf 斜体的衬线字体(拉丁字母等)
DroidSerif-Regular.ttf 常规的衬线字体(拉丁字母等)
Clockopia.ttf (显示数字时钟时用的字体,非必须)
在frameworks/fonts/下有三个xml文件,分别是fallback_fonts.xml、system_fonts.xml、vendor_fonts.xml,最终被编进系统的是前面两个。
修改Settings源码可修改系统设置项,Settings数据被存放于com.android.providers.settings/databases/settings.db 中,如果想修改系统启动后加载的默认值
一种方法是直接修改settings.db的值
另一种就是修改SettingsProvider默认值
Settings应用能够配置Android系统的各种设置,这些设置的默认值都是由frameworks中的SettingsProvider从数据库中读取的,那么第一次开机的时候这些数据都是从哪儿来的呢?
frameworks/base/packages/SettingsProvider/res/values/defaults.xml这个文件就是用来存储Android系统的默认设置
例如:
600000设置关屏超时时间的默认值
102 设置亮度的默认值false设置是否允许安装非Market应用程序的默认值
如果想定义defaults.xml中没有的,在这里添加后,需修改frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java,加入自己的存储代码。
请教下各位高手,Android 4.1源码哪里可以修改 Settings -> Display -> Font size 字体大小的默认选项?默认是选择 普通(Normal) ,我想把默认值设为 超大(Huge),如下图:
frameworks/base/core/java/android/content/res/Configuration.java文件中 public void setToDefaults() 这个方法中进行修改, 把默认字体要改为大,把fontScale值改为1.15f,全清编译; public void setToDefaults() { fontScale = 1.15f; //normal value is 1
-
Android字体资源
2020-07-02 00:18:21Android字体资源1.自定义字体1.1.文件位置1.2.资源引用1.3.语法1.4.示例2.下载字体2.1.文件位置2.2.资源引用2.3.语法2.4.示例 字体资源定义可在应用中使用的自定义字体。字体可以是单独的字体文件或字体文件的集合,...1.概述
Android 8.0 (API 26)提供了一个新特性,即在xml定义字体。意味着字体作为一种资源的形式存在。我们将字体文件(.ttf或.otf)添加到
res/font/
文件夹中,将字体捆绑为资源。这些字体会在R 文件中被编译,并在 Android Studio 中自动提供。我们可以通过@font/myfont
在布局文件中使用,或R.font.myfont
在Java中使用。为了能够在Android 4.1(API 16)的设备上使用这个新特性,我们的应用app要加入Support Library 26库。
那么我们以是否有Support Library 26库作为分界线来讨论字体的使用问题。2.没有Support Library 26库
新建Assets及fonts目录,并将字体文件拷贝到fonts目录下
在java代码中使用:TextView mTV = findViewById(R.id.tv); Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/华文彩云.TTF"); mTV.setTypeface(typeface);
3.有Support Library 26库
新建资源目录font,并将字体文件拷贝到font目录下:
(注意 :资源文件名都要求用小写的英文字命名)
在布局文件中使用:<TextView android:fontFamily="@font/pop" android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
在java中使用:
TextView mTV = findViewById(R.id.tv); Typeface typeface = ResourcesCompat.getFont(this,R.font.pop); mTV.setTypeface(typeface);
3.1.下载字体
这种方式是不把字体文件放在本地,而是在需要时,去网络上请求。
3.1.1.语法
<?xml version="1.0" encoding="utf-8"?> <font-family android:fontProviderAuthority="authority" android:fontProviderPackage="package" android:fontProviderQuery="query" android:fontProviderCerts="@[package:]array/array_resource" />
- android:fontProviderAuthority:必需。定义字体请求的字体提供程序的授权。
- android:fontProviderPackage:必需。要用于请求的字体提供程序的软件包名称。此属性用于验证提供程序的身份。
- android:fontProviderQuery:必需。字体的字符串查询。
- android:fontProviderCerts:数组资源。必需。定义用于为此提供程序签名的证书的哈希集。此属性用于验证提供程序的身份,仅当提供程序不属于系统映像的一部分时才是必需的。该值可以指向单个列表(字符串数组资源)或列表的列表(数组资源),其中每个单独的列表代表一个签名哈希集合。
3.1.2.示例
保存于
res/font/lobster.xml
的 XML 文件:<?xml version="1.0" encoding="utf-8"?> <font-family xmlns:android="http://schemas.android.com/apk/res/android" android:fontProviderAuthority="com.example.fontprovider.authority" android:fontProviderPackage="com.example.fontprovider" android:fontProviderQuery="Lobster" android:fontProviderCerts="@array/certs"> </font-family>
定义证书数组的 XML 文件保存在
res/values/
中:<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="certs"> <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item> </string-array> </resources>
应用字体:
<?xml version="1.0" encoding="utf-8"?> <EditText android:fontFamily="@font/lobster" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello, World!" />
-
Android 字体修改
2019-09-04 10:32:35系统自带影响Android 字体的属性 android:textStyle android:typeface android:fontFamily 1、textStyle可设置三个值:默认normal,加粗bold,倾斜体italic 2、typeface它可选的属性有 normal|sans|serif|...系统自带影响Android 字体的属性
- android:textStyle
- android:typeface
- android:fontFamily
1、textStyle可设置三个值:默认normal,加粗bold,倾斜体italic
2、typeface它可选的属性有 normal|sans|serif|monospace3、fontFamily它可选的属性有 monospace|serif|cursive|casual|sans-serif|sans-serif-black|sans-serif-condensed|sans-serif-condensed|sans-serif-condensed-medium\sans-serif-light\sans-serif-medium\sans-serif-thin\sans-serif-smallcaps
4、自定义字体关于字体,这里推荐两个网站,可以下载到免费的字体供我们使用。 (https://fonts.google.com/) (https://www.1001freefonts.com/) 字体文件,通常都是设计师提供给我们的,一般都是 .ttf(TrueType) 或者 .otf(OpenType) 这两种格式的,比较常用的是 .ttf 格式的。 通常我们会把字体文件放再 assets 目录下,想要加载字体文件,需要使用到 Typeface 这个类,它其中提供了一些 Api ,用于帮助我们来加载一个我们自定义的字体文件。
通常使用案列
TextView textView=new TextView(this); Typeface typeface=Typeface.createFromAsset(getAssets(),"xxx.ttf"); textView.setTypeface(typeface);
-
Android字体Font相关知识
2015-06-25 10:30:51Android字体Font相关知识 -
浅析Android字体加载原理
2017-08-08 09:27:54浅析Android字体加载原理前言 之前在处理系统字体问题的时候,可借鉴的资料很少,遇到了很多坑,不得不了解Android字体加载原理,现抽空写一篇总结,来加深自己对这块的理解。内容概述 Android字体系统是由底层的... -
Android字体简介
2012-10-26 10:09:48Android字体简介 Android系统默认支持三种字体,分别为:“sans”,“serif”,“monospace”。 android.graphic.typeface字体类: 本类的常量静态定义,首先为字体类型(typeface)名称 TypefaceDEFAULT ... -
Android字体使用规范
2015-03-01 20:34:57Android字体设计规范,Material Design -
android字体库
2013-04-08 14:41:20各种字体,微软雅黑,楷体,宋体等29种,可以在开发中应用,也可以android手机用户修改自己的字体。(因为我只能上传60M的文件,所以只能分位两部分上传) -
android字体工作原理
2014-03-23 12:36:10Android字体工作原理 本文简单介绍了上层如何使用特定字体,android字体工作原理提出要求浏览器使用单独的字体,并且不影响系统默认字体的使用。图形小组在该需求的基础上,又提出了如果一个ttf文件包含多个字库,... -
Android字体Typeface设置
2014-07-21 19:11:50Android字体Typeface设置 (2013-04-08 00:09:02) 转载▼ Android系统默认支持三种字体,分别为:“sans”, “serif”, “monospace",除此之外还可以使用其他字体文件(*.... -
android字体样式
2019-05-19 22:25:39版权声明: ... 每周会统一更新到这里,如果喜欢,可关注公众号获取最新文章。...那么按照惯例我又要出个一篇有关 Android 修改字体相关的文章,但是写下来发现内容还挺多的,所以我决定将它们拆分一下,分几... -
android 字体设置
2018-03-09 15:39:451:android 默认字体通过布局设置:android:textStyle="bold" android:typeface="sans" 在Android SDK中使用Typeface类来定义字体,可以通过常用字体类型名称进行设置,如设置默认黑体: ... -
Android字体加粗
2019-03-06 11:32:00Android提供三种字体:“Sans”,“serif“和“monospace”。 在xml中属性为:android:typeface 在xml中属性为:android:textStyle = “bold”,可以将文字设置为粗体。也可以在java代码中:TextView tv = ... -
android字体加粗的方法
2013-09-09 21:31:53android字体加粗 android字体加粗 一、英文字体加粗 在xml文件中使用android:textStyle="bold" 二、中字体加粗 不能通过xml文件将中文设置成粗体,将中文设置成粗体的方法是: TextView tv... -
Android字体使用
2017-07-12 18:06:571. 获得Android系统字体: Typeface.create(String familyName, int style) familyName-字体名称,android系统自带三种字体---"sans"(默认),"serif"和"monospac style-风格,值为:Typeface.NORMAL,... -
android 字体加粗
2018-03-06 19:32:25android:textStyle="bold" 2、中文字体加粗 不能直接在xml文件修改 1)一种方法 TextView textView= (TextView)findViewById(R.id.textView); TextPaint paint = textView... -
Android字体工作原理与应用
2015-03-04 11:33:27Android字体系统由android 2D图形引擎skia实现,字体系统的配置方法在各个版本中不完全相同,按照API level可以划分为三个阶段:4.0以下版本、4.0-4.4版本、5.0及以上版本。本文主要针对4.0及以上版本中字体系统的... -
Android字体多样式和动画TextDrawable
2015-10-21 12:27:23Android字体多样式和动画TextDrawable 在实际的Android开发中,很多时候,需要用TextView表现和展示view的内容和标题、标签之类。但是Android本身提供的TextView只提供了基础的text表现,比较单调乏味,如果要实现... -
Android踩坑日记:Android字体属性及测量(FontMetrics)
2017-09-20 14:17:45Android字体属性及测量(FontMetrics) 字体的几个参数,以Android API文档定义为尊,见下图 要点如下: 基准点是baseline Ascent是baseline之上至字符最高处的距离 Descent是baseline之下至字符最低处的距离 ... -
Android字体样式
2018-02-09 16:09:14单独设置字体样式(1)Android系统提供了几种字体样式可供选择通过设置typeface属性或者fontFamily属性设置typeface属性:normalserifsansmonospacefontFamily属性:casualcursiveserifmonospacesans-serifsans-... -
Android 字体库详解
2020-04-22 10:07:38android 自带的有字体库,在xml中可以设置,当然代码中自不必说。 1:xml使用 <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" ... -
Android字体设置
2016-08-17 13:25:381.自定义字体可以使用setTypeface(Typeface)方法来设置文本框内文本的字体,而android的Typeface又使用TTF字体文件来设置字体。所以,我们可以在程序中放入TTF字体文件,在程序中使用Typeface来设置字体: 1. 第一... -
android 字体绘制,计算距离 笔记
2015-01-08 19:38:57Android 字体绘制 高度计算 paint FontMetrics -
Android 字体自适应设置
2012-03-28 15:15:23不同分辨率下,Android字体大小怎么适应? 假设需要适应320x240,480x320分辨率。在res目录下新建文件夹values-320x240, values-480x320。然后在文件夹 values ,values-320x240 和 values-480x320 下新建xml... -
Android字体设置 Roboto字体使用
2016-05-23 17:08:581.android Typeface使用TTF字体文件设置字体 我们可以在程序中放入ttf字体文件,在程序中使用Typeface设置字体。 第一步,在assets目录下新建fonts目录,把ttf字体文件放到这。 第二步,程序中调用: ... -
android 字体设置ttf
2018-06-06 16:45:33Android系统默认字体支持四种字体,分别为:noraml (普通字体,系统默认使用的字体)sans(非衬线字体)serif (衬线字体)monospace(等宽字体)除此之外还可以使用其他字体文件(*.ttf)关于后三种字体的区别可以... -
Android 字体相关
2014-06-30 14:18:30android Typeface使用TTF字体文件设置字体 我们可以在程序中放入ttf字体文件,在程序中使用Typeface设置字体。 第一步,在assets目录下新建fonts目录,把ttf字体文件放到这。 第二步,程序中调用: ...