2013-02-27 14 views
5

Nella nostra applicazione, stiamo utilizzando Roboto e Roboto Bold. Tuttavia, in alcune versioni di Android (sembra essere dalla 4.0 alla 4.1) abbiamo problemi con il rendering del testo quando si utilizza la versione importata di Roboto (cioè usando Typeface.createFromAsset()) che non appare quando si usa semplicemente la versione integrata di Roboto (cioè Typeface.DEFAULT).Roboto e Roboto Bold sono garantiti per la versione 4.0+?

So che Roboto e Roboto Bold sono stati introdotti in Android 4.0, ma non riesco a trovare nulla che garantisca che questi font siano disponibili indipendentemente dalla modifica del produttore (ad esempio Touchwiz, Sense). Se sono garantiti per esistere, possiamo semplicemente utilizzare un controllo di versione per utilizzare solo l'importazione personalizzata per dispositivi inferiori a Android 4.0.

risposta

3

EDIT: Con un po ' la sperimentazione, in particolare con il Galaxy S3 che consente all'utente di cambiare il loro carattere, questo è quello che ho scoperto:

  • Utilizzando Typeface.create(Typeface.SANS_SERIF, Typeface.NORMAL) tornerà ° al carattere CUSTOM, piuttosto che al carattere sans-serif di default del sistema (ad es. Roboto)
  • Invece, utilizzare Typeface.create("sans-serif", Typeface.NORMAL) (o BOLD) e restituirà Roboto indipendentemente dalla personalizzazione del carattere dell'utente. Dalla lista qui sotto, puoi usare "helvetica", "tahoma", "verdana" o "arial" sopra invece di "sans-serif" con lo stesso risultato.

Ho trovato un documento chiamato system_fonts.xml che sembra confermare che Roboto sarà utilizzato per qualsiasi riferimento alla Typeface.SANS_SERIF nella directory SDK sotto:

piattaforme> Android-14> Dati> font

<!-- 
    System Fonts 

    This file lists the font families that will be used by default for all supported glyphs. 
    Each entry consists of a family, various names that are supported by that family, and 
    up to four font files. The font files are listed in the order of the styles which they 
    support: regular, bold, italic and bold-italic. If less than four styles are listed, then 
    the styles with no associated font file will be supported by the other font files listed. 

    The first family is also the default font, which handles font request that have not specified 
    specific font names. 

    Any glyph that is not handled by the system fonts will cause a search of the fallback fonts. 
    The default fallback fonts are specified in the file /system/etc/fallback_fonts.xml, and there 
    is an optional file which may be supplied by vendors to specify other fallback fonts to use 
    in /vendor/etc/fallback_fonts.xml. 
--> 
<familyset> 

    <family> 
     <nameset> 
      <name>sans-serif</name> 
      <name>arial</name> 
      <name>helvetica</name> 
      <name>tahoma</name> 
      <name>verdana</name> 
     </nameset> 
     <fileset> 
      <file>Roboto-Regular.ttf</file> 
      <file>Roboto-Bold.ttf</file> 
      <file>Roboto-Italic.ttf</file> 
      <file>Roboto-BoldItalic.ttf</file> 
     </fileset> 
    </family> 

Dal momento che i tipi di carattere vendor devono essere posti in fallback_fonts.xml e i font di sistema avranno sempre la priorità, e la prima famiglia elencata è Roboto con gli alias di sans-serif, aria, helvetica, tahoma o verdana, a meno che non scopra altrimenti penso che sia sicuro assumere che Roboto sarà il font restituito per una chiamata a Typeface.create(Typeface.SANS_SERIF, Typeface.NORMAL).

Ho intenzione di lasciarlo aperto per ora, sperando in una risposta definitiva, poiché non sono sicuro che un OEM possa modificare system_fonts.xml. Se lo sono, allora questo non è affatto d'aiuto.

1

Nella sezione 3.8.5 del Android 4.0 Compatibility Documentation si dice:

3.8.5. Temi Android fornisce "temi" come meccanismo per le applicazioni per applicare gli stili attraverso un'intera attività o applicazione. Android 3.0 ha introdotto un nuovo tema "Holo" o "olografico" come un insieme di stili definiti da utilizzare per gli sviluppatori di applicazioni che vogliono corrispondere allo aspetto e tema del tema Holo come definito dall'SDK di Android [Resources, 24] . Implementazioni dispositivo NON DEVE modificare uno qualsiasi degli attributi di tema Holo esposti alle applicazioni [Risorse, 25]. Android 4.0 introduce un nuovo tema "Device Default" come un insieme di stili definiti per gli sviluppatori di applicazioni da utilizzare se si desidera che corrispondano all'aspetto del tema del dispositivo definito dal dispositivo implementatore. Le implementazioni del dispositivo POSSONO modificare gli attributi del tema DeviceDefault esposti in applicazioni [Resources, 25].

per quanto ne so, il set di caratteri Roboto è parte del tema Holo, e quindi è necessario per essere presente su qualsiasi Android 4.0 e versioni successive dispositivo che è stato certificato da Google (cioè corre Google Play).

Lo stesso requisito è presente nei 4.1 e 4.2 documenti

anche (Ricerca per Holo nei file PDF per trovare la sezione rapidamente C'è solo 4 menzioni di esso.)

+0

Non ne sono completamente sicuro, ma penso che il tema predefinito di Holo non specifichi il carattere tipografico, solo la dimensione e lo stile del testo che consentirebbe ai produttori di selezionare quali tipi di carattere spedire/utilizzare. – ebarrenechea

+0

@ebarrenchea Anche io non ne sono sicuro, e non riesco a trovare un posto ufficiale nella documentazione o nei documenti di compatibilità che conferma o nega questo, ed è per questo che ho scelto di dire "AFAIK" –

+1

Ho appena chiamato Ping Adam Powell (che ha scritto [questo articolo] (http://android-developers.blogspot.com/2012/01/holo-everywhere.html)) su Google+ per vedere se forse può chiarire. – kcoppock

Problemi correlati