martes, 18 de marzo de 2014

Fuentes para Texto en Android

Por omision, en todos los dispositivos Android vienen cargadas tres fuentes que podemos utilizar libremente en nuestras aplicaciones:
  • Sans
  • Serif
  • Monospace
Para cambiar la fuente utilizada en un texto podemos indicarlo directamente en el archivo xml que lo define. Por ejemplo, en nuestra aplicación, abrimos el fichero \res\layout\main.xml y en la definición del TextView incluimos la linea :
android:typeface=”sans” de forma que quede como sigue:

<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    android:typeface="sans"
    />


Para probar con las diferentes fuentes definimos  varias entradas en nuestro archivo strings.xml (por ejemplo ‘helloSans’, ‘helloSerif’ y ‘helloMonospace’) y a cada uno le pongo un contenido distinto. Después en el fichero main.xml defino un TextView por cada uno de ellos con una fuente distinta:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/helloSans"
    android:typeface="sans"
    />
<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/helloSerif"
    android:typeface="serif"
    />
<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/helloMonospace"
    android:typeface="monospace"
    />   
</LinearLayout>

Al ejecutar la aplicación veremos los diferentes tipos de letra aplicados a cada uno de los campos:
 
Si queremos aplicar una fuente diferente a las que vienen por defecto en Android tendremos que conseguir el fichero .ttf (true type font) correspondiente (en la red existen multiples páginas desde la que podes descargar archivos de este tipo).
Una vez conseguido debemos crear la carpeta ‘fonts’ dentro de ‘assets’ en nuestro proyecto y, dentro de ella copiaremos nuestro fichero .ttf. Yo haré la prueba con la fuente jokerman.ttf.
Defino una nueva entrada en strings.xml llamada ‘helloPoker’ y un nuevo campo TextView en main.xml, sin ponerle el atributo typeface, pero añadiendo un identificador para poder manejarlo desde nuestro programa. Debe quedar así:

<TextView 
    android:id="@+id/poker"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/helloPoker"
    /> 
Para asignar la nueva fuente al campo de texto deberemos empezar a tocar código fuente del fichero ‘AndroideNovatoActivity.java’ de la carpeta ‘src’ de forma que quede como sigue:

 
01public class AndroideNovatoActivity extends Activity {
02    /** Called when the activity is first created. */
03    @Override
04    public void onCreate(Bundle savedInstanceState) {
05        super.onCreate(savedInstanceState);
06        setContentView(R.layout.main);
07         
08        // Defino la nueva fuente cargandola desde el fichero .ttf        
09        Typeface miPropiaTypeFace = Typeface.createFromAsset(getAssets(),"fonts/jokerman.ttf");
10         
11        // Cargo en una variable tipo TextView el campo de la pantalla
12        // identificado con el id poker.
13         
14        TextView helloPoker = (TextView)findViewById(R.id.poker);
15         
16        // Le aplico el nuevo tipo de letra
17        helloPoker.setTypeface(miPropiaTypeFace);
18 
19    }
20}
Si os aparecen algunas líneas subrayadas en rojo significa que debemos importar las clases corresondientes para manejar ese tipo de datos. Para solucionar este problema pulsamos a la vez las teclas Ctrl-Shift y la letra ‘O’ y Eclipse incluirá las líneas que hacen falta automáticamente al principio del programa.
Al ejecutar la aplicación veremos el nuevo campo con la nueva fuente cargada:

 
El uso de fuentes personalizadas tiene sus problemas como el tamaño que ocupan o posibles desajustes según la resolución del dispositivo en el que se utilice. Asimismo debemos tener en cuenta si la fuente utilizada permite su libre utilización o está sujeta a algún tipo de restricción legal.

No hay comentarios:

Publicar un comentario