2012-01-27 23 views
24

Come posso usare un carattere personalizzato che è stato aggiunto nella cartella delle risorse nel mio xml? So che possiamo usare il metodo setTypeface() in java, ma dobbiamo farlo ovunque, dove lo usiamo TextView. Quindi c'è un modo migliore?Come utilizzare caratteri personalizzati in Android xml?

+0

Ho aggiornato la mia risposta. Si prega di rimuovere -ve da quella risposta. –

+0

Prova questo tutorial [http://www.barebonescoder.com/2010/05/android-development-using-custom-fonts/](http://www.barebonescoder.com/2010/05/android-development-using -custom-fonts /) Penso che ti sia d'aiuto – Ajay

+0

Ciao per favore fai riferimento a questo post . un problema con la stessa natura è stato discusso e risposto laggiù. – Wajeeh

risposta

58

Il modo migliore in cui ho trovato googling è: se vuoi utilizzare in TextView, dobbiamo estendere Textview e impostare il carattere in modo che in seguito possiamo utilizzare la nostra Textview personalizzata nel nostro xml. Mostrerò il TextView esteso sotto

package com.vins.test; 

import android.content.Context; 
import android.graphics.Typeface; 
import android.util.AttributeSet; 
import android.widget.TextView; 

public class MyTextView extends TextView { 

    public MyTextView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     init(); 
    } 

    public MyTextView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    public MyTextView(Context context) { 
     super(context); 
     init(); 
    } 

    private void init() { 
     Typeface tf = Typeface.createFromAsset(getContext().getAssets(), 
               "your_font.ttf"); 
     setTypeface(tf); 
    } 

} 

Chiamando init() per impostare il carattere in ciascuno dei costruttori. Successivamente dobbiamo usare questo nel nostro main.xml come mostrato sotto.

<com.vins.test.MyTextView 
    android:id="@+id/txt" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:layout_weight="1" 
    android:text="This is a text view with the font u had set in MyTextView class " 
    android:textSize="30dip" 
    android:textColor="#ff0000" 
    > 

Aggiornamento:

essere informati circa la perdita di memoria in fase di pre-4.0 di Android come detto da pandre.

+0

@vins: cosa succede se l'utente dichiara anche 'android: textStyle =" bold "'? Il testo sarà effettivamente impostato in grassetto? –

+0

@kilaka Sì, dovrebbe girare in grassetto. – Vins

+1

@vins - grazie. Questo significa che il file ttf include tutti i sottotipi del font: grassetto, corsivo, ecc. E combinazioni di essi? –

2

Metti la tua file di font in asset\fonts\fontname

definire tre TextView nel file XML allora, inserire questo codice nella classe di attività:

public class AndroidExternalFontsActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     // Font path 
     String fontPath = "fonts/DS-DIGIT.TTF"; 
     String fontPath1 = "fonts/Face Your Fears.ttf"; 
     String fontPath2 = "fonts/HelveticaNeue-Bold_0.otf"; 

     // text view label 
     TextView txtGhost = (TextView) findViewById(R.id.ghost); 
     TextView txtGhost1 = (TextView) findViewById(R.id.ghost1); 
     TextView txtGhost2 = (TextView) findViewById(R.id.ghost2); 

     // Loading Font Face 
     Typeface tf = Typeface.createFromAsset(getAssets(), fontPath); 
     Typeface tf1 = Typeface.createFromAsset(getAssets(), fontPath1); 
     Typeface tf2 = Typeface.createFromAsset(getAssets(), fontPath2); 

     // Applying font 
     txtGhost.setTypeface(tf); 
     txtGhost1.setTypeface(tf1); 
     txtGhost2.setTypeface(tf2); 
    } 
} 
+13

Ehi, questo è il modo normale per impostare il carattere, la domanda era per l'utilizzo di caratteri personalizzati per impostazione predefinita in XML. – Vins

Problemi correlati