如何修改Recovery的字符串资源(修改显示字体颜色和大小)

前言:在上一篇文章《如何修改Recovery的字符串资源》中,主要是介绍了如何修改字符串资源的内容。在实际中,我们既可能需要修改字符串在UI中的字体颜色和字体大小。那么如何对Recovery进行修改呢?

     经过一段时间的摸索和研究,总结出目前已知的方式有两种:1,直接使用需要显示效果的图片资源,如阿里YunOS的方法。2. 在代码上进行颜色修改,然后在上一篇提到的方法中,通过生成资源的APK文件中修改字体的大小。下面分别介绍下两种方法:

     方法一:直接替换字体的图片资源。参考YunOS的Recovery。 
     首先在在res/images目录下准备如下:
     installing_text.png打开后的内容是:

     erasing_text.png打开的内容是:

     
     然后在代码上修改文件 screen_ui.cpp,对应的ScreenRecoveryUI::Init()函数中,将原来的
          LoadLocalizedBitmap("installing_text", &backgroundText[INSTALLING_UPDATE]);
LoadLocalizedBitmap("erasing_text", &backgroundText[ERASING]);
改为:
LoadBitmap("installing_text", &backgroundText[INSTALLING_UPDATE]);
LoadBitmap("erasing_text", &backgroundText[ERASING]);
     这样就完成了字体的颜色和大小的替换。

     方法二:通过修改代码来改变颜色,然后通过APK修改字体大小。
     首先,我们可以在screen_ui.cpp的ScreenRecoveryUI::draw_background_locked中,修改代码段
     gr_color(255, 255, 255, 255); 这里就是字体颜色的RBGA值。
     然后,通过修改recovery_l10n这个apk的代码,在onCreate()的函数内,有一个变量mText是用来显示字符串的,而代码
      Bitmap b = mText .getDrawingCache();
      savedBitmaps .put( thisLocale , b.copy(Bitmap.Config. ARGB_8888 , false ));
     说明保存字符串的图片内的字符串是通过这个mText来建立图片的缓存信息的,所以只要将mText的字体变大mText.setTextSize()即可实现字体的变大。然后再通过上一篇文章的步骤,重新编译。

     总结:两种方法都可以修改Recovery的升级等提示信息的字体的颜色和大小。方法一具有图片特有的优点,实现效果好,界面美观。缺点就是只能显示一种语言,无法根据语言自动切换文字。方法二的优点也就是方法一的缺点了。

     另外附一篇别人的文章, http://blog.csdn.net/kangear/article/details/10011849 标题是“ Android的Recovery中font_10x18.h字库文件制作”,我原来以为是通过修改font.h来实现字体的大小的修改,后来做了很多次的实验,硬是没有成功,然后我就想会不会是对Recovery的Menu有效,后来发现也无效。。。

2016-10-27 更新:

     经网友提点,原来在build/core/Makefile里还有对字体有影响的语句:
recovery_font := $(call include-path-for, recovery)/fonts/36x64.png
这里定义了一个recovery_font的变量,而这个变量的用处在另一处说明了是:
$(hide) cp -f $(recovery_font) $(TARGET_RECOVERY_ROOT_OUT)/res/images/font.png
也就是将原来的36x64.png文件拷贝到res/imges/font.png.在回顾之前的源码,在minui/graphics.cz的函数gr_init_font()中一开始就有个读取font文件资源:int res = res_create_surface("font", (void**)&(gr_font->texture)); 这句话就是读取res/images/font.png,然后进行长宽的设定,只有读不到这个资源的时候才调用另一个判断使用font.h文件。
     
     所以之前一直改font.h无法有效的原因已经找到,要不去掉Makefile的语句,要不直接改Makefile的指定字体文件即可实现Menu的字体修改。
     
     


你可能感兴趣的:(Android,Tips)