2013-05-14 6 views
11

Questa domanda è quasi una pubblicazione di Android App: how to read Font Size under Settings? Ho letto la risposta di CommonsWare che indica l'utilizzo di Settings.System.FONT_SCALE. Così ho scritto queste poche righe:Leggi la dimensione del carattere da Impostazioni

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

mio problema è che ho sempre trovato la SettingNotFoundException che sto utilizzando un dispositivo Android 4.2.2. A proposito, quel codice è in una callback onCreate di un Activity.

Ho cercato su Google per questo problema e ho trovato circa 3 siti che utilizzano lo stesso codice. È richiesto un permesso speciale? Ho provato anche il permesso android.permission.WRITE_SETTINGS senza successo.

+0

hmm, non sono sicuro che sia necessario leggerlo. Il sistema non esegue il ridimensionamento per te finché usi unità sp ?? – Teovald

+0

Beh, certo, ma ho alcuni bug grafici che devo correggere con quel fattore di scala. – rekire

risposta

27

Ho appena trovato nel codice sorgente di Settings.System questa funzione:

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

C'è però il FONT_SCALE nell'uso così ho controllato per che Configuration classe in cui il documentazione punti a getResources().getConfiguration(). Così ho Cound risolvere il mio codice utilizzando:

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

È possibile impostare font di sistema secondo la scala di carattere.

Esempio: per la scala di caratteri enormi è 2.0, è possibile impostare come segue.

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

Aggiungi "galleggiare def" param alla fine del galleggiante public static getFloat (ContentResolver cr, String name, galleggiare DEF)

Esempio:

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