Android中修改默认字体的大小----fontScale
来源:互联网 发布:老版本知乎2.4.4 编辑:程序博客网 时间:2024/06/05 04:46
有客户需求要修改系统中默认字体的大小。
一般的步骤是,在frameworks/base/core/java/android/content/res/Configuration.java文件中,修改函数setToDefaults中fontScale的值,例如改成:fontScale = 1.18f 。然后在packages/apps/Settings/res/values/arrays.xml中,修改数组entryvalues_font_size中的值,使其中有一个值何默认值是一样的即1.18(不然的话会出现默认字体是一个大小,然后在Settings->Display->Font size中设置的时候就设置不了默认的fontScale了,也会出现比如明明最开始的时候字体是normal,但是再次点击normal的时候字体会改变)。
/** * Set this object to the system defaults. */ public void setToDefaults() { fontScale = 1; mcc = mnc = 0; locale = null; userSetLocale = false; touchscreen = TOUCHSCREEN_UNDEFINED; keyboard = KEYBOARD_UNDEFINED; keyboardHidden = KEYBOARDHIDDEN_UNDEFINED; hardKeyboardHidden = HARDKEYBOARDHIDDEN_UNDEFINED; navigation = NAVIGATION_UNDEFINED; navigationHidden = NAVIGATIONHIDDEN_UNDEFINED; orientation = ORIENTATION_UNDEFINED; screenLayout = SCREENLAYOUT_UNDEFINED; uiMode = UI_MODE_TYPE_UNDEFINED; screenWidthDp = compatScreenWidthDp = SCREEN_WIDTH_DP_UNDEFINED; screenHeightDp = compatScreenHeightDp = SCREEN_HEIGHT_DP_UNDEFINED; smallestScreenWidthDp = compatSmallestScreenWidthDp = SMALLEST_SCREEN_WIDTH_DP_UNDEFINED; densityDpi = DENSITY_DPI_UNDEFINED; seq = 0; simSetLocale = false; /// M: sim locale feature }
<string-array name="entryvalues_font_size" translatable="false"> <item>0.85</item> <item>1.0</item> <item>1.15</item> <item>1.30</item> </string-array>
在显示Display界面时,会运行Settings/src/com/android/settings/DisplaySettings.java这个类,在onResume的时候,会调用函数updateState(),在这个函数中接着会调用readFontSizePreference(mFontSizePref);在这个函数中会获取当前系统中的字体大小:
public void readFontSizePreference(ListPreference pref) { try { Log.d("zhangmq", "readFontSizePreference ActivityManagerNative.getDefault().getConfiguration() = " +ActivityManagerNative.getDefault().getConfiguration()); mCurConfig.updateFrom(ActivityManagerNative.getDefault().getConfiguration()); } catch (RemoteException e) { Log.w(TAG, "Unable to retrieve font size"); } // mark the appropriate item in the preferences list Log.d("zhangmq", "readFontSizePreference mCurConfig.fontScale = " + mCurConfig.fontScale); int index = floatToIndex(mCurConfig.fontScale); Log.d("zhangmq", "readFontSizePreference index = " + index); pref.setValueIndex(index); // report the current size in the summary text final Resources res = getResources(); String[] fontSizeNames = res.getStringArray(R.array.entries_font_size); pref.setSummary(String.format(res.getString(R.string.summary_font_size), fontSizeNames[index])); }真是有趣的是floatToIndex方法:
int floatToIndex(float val) { String[] indices = getResources().getStringArray(R.array.entryvalues_font_size); float lastVal = Float.parseFloat(indices[0]);//获得数组中的第一个值,如0.85 Log.d("zhangmq", "floatToIndex lastVal = " + lastVal); for (int i=1; i<indices.length; i++) { //循环比较,从第二个值开始 Log.d("zhangmq", "floatToIndex fffffffffffffff "); float thisVal = Float.parseFloat(indices[i]); Log.d("zhangmq", "floatToIndex thisVal = " + thisVal); if (val < (lastVal + (thisVal-lastVal)*.5f)) { //val与 前一个值加上后一个减去前一个值得差值的一半 进行比较,即与两个相连值得中间值比较 Log.d("zhangmq", "floatToIndex qqqqqqqqq i-1 = " + (i-1)); return i-1; //如果val小于两个相连值得中间值,则index去前一个值,否则继续循环比较 } lastVal = thisVal; Log.d("zhangmq", "floatToIndex iiiiiiiii lastVal = " + lastVal); } return indices.length-1; }
有时候会在overlay中进行覆盖Settings中的entryvalues_font_size,如果修改Settings中的entryvalues_font_size没作用,可以查看是否被overlay等覆盖了。
0 0
- Android中修改默认字体的大小----fontScale
- 修改RichFaces的默认字体和大小
- Android 修改App中默认TextView的字体和颜色
- 修改Android中Layout布局文件字体的大小
- android studio默认修改主题,字体,文字颜色,大小等属性的设置
- 关于如何修改PreferenceFragment中默认的字体颜色和大小
- Android EditText 修改提示字体的大小
- Eclipse 修改注释中字体的大小
- 修改UIWebView中字体的大小
- Matlab中如何修改字体的大小?
- 修改UIWebView中字体的大小
- 修改Spinner中字体的大小
- 修改UIWebView中字体的大小
- 修改UIWebView中字体的大小
- 修改UIWebView中字体的大小
- 修改UIWebView中字体的大小
- 修改UIWebView中字体的大小,颜色
- Android 默认声音大小修改
- 直播源地址
- CS231n课程笔记翻译:图像分类笔记(下)
- 自定义圆形头像
- MFC编程之添加拖动文件获取文件路径功能
- Android 动态修改TextView 颜色Color
- Android中修改默认字体的大小----fontScale
- 第一篇博客
- 微信公众号开发--自定义菜单失败40033解决方案
- Java 远程调用之Hessian简例
- 【数据结构学习】二叉树
- [OpenGL ES 05]相对空间变换及颜色
- 【C语言】静态线性顺序表
- 正则表达式示例。
- jsbin-jsfiddle-or-codepen-which-one-to-use-and-why