本FAQ介绍的是在 android L上需要实现切换字库的功能。
[SOLUTION]
切换字体我司提供两种方法
方法一:无论是在何种语言下都使用客户定制的字库
方法二:在特定的语言下使用客户定制的字库
方法一
1. 把对应的字库文件拷贝到Frameworks/base/data/fonts下
2. 修改fallback_fonts.xml (frameworks/base/data/fonts)文件(在文件中加入客
户定制的字库)
例如
myfont.ttf
3.framework/base/data/fonts/目录下FONTS.XM文件中加入定义如
Roboto-Thin.ttf
方法二
前面两步和方法一的前两步一致,第三步改为如下
3. 如果是需要在某些语言需要切换字库而其他语言不需要,直接加入如下步骤。
framework\base\graphics\Java\android\graphics\FontListParser.java
中的
private static Family readFamily(XmlPullParser parser)这个函数中在下面对应
位置加入红色代码
throws XmlPullParserException, IOException {
String name = parser.getAttributeValue(null, "name");
String lang = parser.getAttributeValue(null, "lang");
String variant = parser.getAttributeValue(null, "variant");
List fonts = new ArrayList();
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.start_TAG) continue;
String tag = parser.getName();
if (tag.equals("font")) {
String weightStr = parser.getAttributeValue(null, "weight");
int weight = weightStr == null ? 400 : Integer.parseInt(weightStr);
boolean isItalic = "italic".equals(parser.getAttributeValue(null,
"style"));
String filename = parser.nextText();
//added
String country_code=systemProperties.get("persist.sys.lang_country",
"GB");
if(country_code.equals("RU") ||country_code.equals("UA")){
if(filename.equals("Roboto-Regular.ttf")){
filename = "RobotoCondenSED-Regular.ttf";
}
}
//end