web-dev-qa-db-ja.com

設定からフォントサイズを読み取る

この質問はほとんど重複しています Androidアプリ:[設定]でフォントサイズを読み取る方法は? 私は CommonsWare の答えを読みましたSettings.System.FONT_SCALE。だから私はこの数行を書いた:

float scale = -66.6f;
try {
    scale = Android.provider.Settings.System.getFloat(getContentResolver(),
                                    Android.provider.Settings.System.FONT_SCALE);
} catch(SettingNotFoundException e) {
    Log.e(getClass().getSimpleName(), "Error: ", e);
}
Toast.makeText(this, "scale=" + scale, Toast.LENGTH_LONG).show();

私の問題は、常にSettingNotFoundExceptionを取得することですAndroid 4.2.2デバイスを使用しています。ちなみに、そのコードはonCreateコールバックにありますActivityの。

私もその問題をグーグルで検索し、同じコードを使用している約3つのサイトを見つけました。特別な許可が必要ですか?許可も試しましたAndroid.permission.WRITE_SETTINGS成功せず。

18
rekire

_Settings.System_ この関数のソースコードで見つけました:

_/** @hide */
public static void getConfigurationForUser(ContentResolver cr,
                                       Configuration outConfig, int userHandle) {
    outConfig.fontScale = Settings.System.getFloatForUser(
        cr, FONT_SCALE, outConfig.fontScale, userHandle);
    if (outConfig.fontScale < 0) {
        outConfig.fontScale = 1;
    }
}
_

ただし、使用中の_FONT_SCALE_があるので、ドキュメントがgetResources().getConfiguration()を指している Configuration クラスを確認しました。だから私は以下を使ってコードを修正します:

_float scale = getResources().getConfiguration().fontScale;
_
30
rekire

フォントスケールに合わせてシステムフォントを設定できます。

例:巨大なフォントスケールが2.0の場合、次のように設定できます。

Configuration config = new Configuration();
config.fontScale = 2.0f;
getResources().getConfiguration().setTo(config);
4

「floatdef」パラメータを最後に追加します

public static float getFloat(ContentResolver cr, String name, float def)

例:

scale = Android.provider.Settings.System.getFloat(getActivity().getContentResolver(),
                                    Android.provider.Settings.System.FONT_SCALE, 1f);
2
Andrej