Androidで標準フォントのサイズを変更する

4902 ワード

システムの標準フォントのサイズを変更する必要があります。
一般的なステップは、frame eworks/core/java/android/content/res/Configration.javaファイルで関数set ToDefaultsのfontScaleの値を変更することであり、例えば、fontScale=1.18 fに変更する。その後、packages/apps/Settings/res/values/arrays.xmlで、配列entryvalues_を修正します。font.sizeの値は、デフォルトの値と同じである1.18(そうでないとデフォルトのフォントが表示されます。そしてSettings->Display->Fontsizeで設定されている場合はデフォルトのfont Scaleが設定されなくなります。最初のフォントが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の時に、関数udateStateを呼び出します。この関数の中でreadFontSizeference(mFontSizef)を呼び出します。この関数では、現在のシステムのフォントサイズを取得します。
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]));
    }
本当に面白いのはfloat ToIndex方法です。
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

overlay Settings entryvalues_font_size, Settings entryvalues_font_size , overlay 。