android改变字体大小函数,Android中修改默认字体的大小----fontScale

有客户需求要修改系统中默认字体的大小。

一般的步骤是,在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

}

0.85

1.0

1.15

1.30

在修改的过程中,看到一种比较好的字体大小与显示之间的对应关系:

在显示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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值