2016-04-25 1 views
0

Je veux changer la police de mon application complète! Mais je ne sais pas comment accéder à l'application complète. J'ai un moyen d'accéder à un texte par ID, comment puis-je changer le code pour accéder à l'ensemble de l'App?Police externe Android pour l'application complète

public class ExternalFont extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    String fontPath = "fonts/FreeUniversal-Regular.ttf"; 
    TextView txtUniversal = (TextView) findViewById(R.id.universal); 
    Typeface tf = Typeface.createFromAsset(getAssets(), fontPath); 
    txtUniversal.setTypeface(tf); 
} 

}

Répondre

0

Créez votre propre Textview avec un style personnalisé.

Exemple:

public class YourTextView extends TextView { 

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

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

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

    private void init() { 
     Typeface tf = Typeface.createFromAsset(context.getAssets(), 
      "fonts/yourfont.ttf"); 
     setTypeface(tf); 
    } 
} 

Vous pouvez utiliser en XML vôtre.

0

Malheureusement, il n'y a aucun moyen direct de changer la police de caractères de tous les TextViews que vous utilisez dans votre application en modifiant simplement la police par défaut.

Ce que vous pouvez faire est de créer votre propre TextView personnalisé et de définir la typographie comme suggéré par #josedlujan. Mais la faille de cette approche est que chaque fois qu'un objet TextView sera créé, un nouvel objet Typeface sera créé, ce qui est extrêmement mauvais pour l'utilisation de la RAM (Un objet Typeface varie typiquement de 8-13 kb pour les polices comme Roboto). Il est donc préférable de mettre en cache votre police dès qu'elle est chargée.

Etape 1: Création d'un cache de Typeface pour votre application -

public enum Font { 

    // path to your font asset 
    Y("fonts/Roboto-Regular.ttf"); 

    public final String name; 
    private Typeface typeface; 

    Font(String s) { 
    name = s; 
    } 

    public Typeface getTypeface(Context context) { 

    if (typeface != null) return typeface; 
    try { 
     return typeface = Typeface.createFromAsset(context.getAssets(), name); 
    } catch (Exception e) { 
     return null; 
    } 
    } 

    public static Font fromName(String fontName) { 

    return Font.valueOf(fontName.toUpperCase()); 
    } 

Étape 2: Définissez votre propre attribut personnalisé "customFont" dans attrs.xml pour votre CustomTextView

attrs.xml - 
<declare-styleable name="CustomFontTextView"> 
    <attr name="customFont"/> 
</declare-styleable> 


<com.packagename.CustomFontTextView 
      android:id="@+id/some_id" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      app:customFont="rl"/> 

Étape 3: Créez votre propre TextView personnalisé

public class CustomFontTextView extends TextView { 

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

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

public CustomFontTextView(Context context) { 
    super(context); 
    init(context, null); 
} 

private void init(Context context, AttributeSet attrs) { 

    if (attrs == null) { 
    return; 
    } 

    TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomFontTextView, 0 ,0); 
    String fontName = a.getString(R.styleable.CustomFontTextView_customFont); 

    String textStyle = attrs.getAttributeValue(styleScheme, styleAttribute); 

    if (fontName != null) { 
    Typeface typeface = Font.fromName(fontName).getTypeface(context); 
    if (textStyle != null) { 
     int style = Integer.decode(textStyle); 
     setTypeface(typeface, style); 
    } else { 
     setTypeface(typeface); 
    } 
    } 
    a.recycle(); 
}