2013-05-14 22 views
11

To pytanie jest prawie dublowane z Android App: how to read Font Size under Settings? Przeczytałem odpowiedź CommonsWare, która wskazuje na użycie Settings.System.FONT_SCALE. Więc napisałem to kilka linijek:Przeczytaj rozmiar czcionki z Ustawień

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(); 

Moim problemem jest to, że zawsze uzyskać SettingNotFoundException Używam Android 4.2.2 urządzenia. Przy okazji, ten kod jest w wywoływaniu onCreate z Activity.

Również szukałem w Google tego problemu i znalazłem około 3 witryn, które używają tego samego kodu. Czy wymagane jest specjalne zezwolenie? Próbowałem też bezskutecznie zgody android.permission.WRITE_SETTINGS.

+0

hmm, nie jestem pewien, czy musisz to przeczytać. Czy system nie wykonuje skalowania tak długo, jak używasz jednostek sp? – Teovald

+0

Jestem pewien, ale mam kilka błędów graficznych, które muszę naprawić przy pomocy tego współczynnika skali. – rekire

Odpowiedz

27

Właśnie znalazłem w kodzie źródłowym Settings.System tę funkcję:

/** @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; 
    } 
} 

Istnieje jednak FONT_SCALE w użyciu więc sprawdziłem na tym Configuration klasy gdzie punkty dokumentacji do getResources().getConfiguration(). Więc naprawię kod za pomocą:

float scale = getResources().getConfiguration().fontScale; 
3

Możesz ustawić czcionkę systemową zgodnie ze skalą czcionki.

Przykład: dla ogromnej skali czcionki wynosi 2,0, można ustawić w następujący sposób.

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

Dodaj "unosić" def param do końca public static pływaka getFloat (ContentResolver Cr, String name, float def)

Przykład: skala

= android.provider.Settings .System.getFloat (getActivity(). GetContentResolver(), android.provider.Settings.System.FONT_SCALE, 1f);

Powiązane problemy