2016-04-25 4 views
0

Ich möchte die Schriftart meiner vollständigen App ändern! Aber ich weiß nicht, wie man auf die komplette Anwendung zugreifen kann. Ich habe eine Möglichkeit, auf einen Text per ID zuzugreifen, wie kann ich den Code ändern, um auf die gesamte App zuzugreifen?Android externe Schriftart für komplette App

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

}

Antwort

0

Erstellen Sie Ihre eigenen Textview mit benutzerdefinierten Stil.

Beispiel:

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

Sie können in Ihrem XML verwenden.

0

Leider können Sie die Schriftart aller TextViews, die Sie in Ihrer App verwenden, nicht direkt ändern, indem Sie nur die Standardschrift ändern.

Was Sie tun können, ist Ihre eigenen benutzerdefinierten TextView erstellen und Schriftart, wie von #josedlujan vorgeschlagen. Aber der Fehler bei diesem Ansatz ist, dass jedes Mal, wenn ein TextView-Objekt erstellt wird, ein neues Typeface-Objekt erstellt wird, das extrem schlecht für die RAM-Nutzung ist (Ein Typeface-Objekt variiert typischerweise von 8-13 kb für Schriften wie Roboto). Es ist also besser, den Typeface nach dem Laden zwischenzuspeichern.

Schritt 1: Schriftart-Cache für Ihre Anwendung erstellen -

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

Schritt 2: Definieren Sie Ihr eigenes benutzerdefiniertes Attribut "customFont" in attrs.xml für Ihre 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"/> 

Schritt 3: Erstellen Sie Ihre eigene benutzerdefinierte TextView

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