Custom Fonts und benutzerdefinierte Textview auf Android

Von einer Anwendung, die ich entwickeln muss, habe ich eine bestimmte Schriftart mit vielen Dateien wie FontName-Regular, FontName-Bold , FontName-it erhalten . Ich muss es in allen Textansichten in der Anwendung verwenden. Zuerst dachte ich, es war eine leichte Aufgabe. Schau über SO und fand einen sehr schönen Faden: hier

Also zuerst habe ich:

  • So verwenden Sie Android xliff: g
  • Probleme bei der Installation programmgesteuert einer App mit INSTALL_PACKAGES Berechtigung von / system / app
  • Bring nicht den Knopf zum Vordergrund
  • Anruf-Methode, wenn Home-Taste auf Android gedrückt
  • Android - Erhalten Sie den sichtbaren Bereich einer Ansicht?
  • Google Play und OpenSSL Warnmeldung
  • public static void overrideFonts(final Context context, final View v) { try { if (v instanceof ViewGroup) { ViewGroup vg = (ViewGroup) v; for (int i = 0; i < vg.getChildCount(); i++) { View child = vg.getChildAt(i); overrideFonts(context, child); } } else if (v instanceof TextView) { ((TextView)v).setTypeface(FONT_REGULAR); } } catch (Exception e) { e.printStackTrace(); // ignore } } 

    Und nannte diese Methode während onCreate in meiner Tätigkeit. Jeder textView in meiner app zeigte diese Schrift und Jungen, war ich glücklich für immer so einfach. Bis ich auf einen Bildschirm kam, wo einige Textbilder benötigt Bold als Style ( android:textStyle="bold" ). Dann erkannte ich, dass diese Lösung mir nicht die Möglichkeit bietet, die Font-Bold .ttf aus den Assets zu laden.

    Als sah ich weiter und sah eine schöne benutzerdefinierte TextView-Implementierung, in der gleichen SO-Frage:

     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(); } public void init() { Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "font/chiller.ttf"); setTypeface(tf ,1); } } 

    Das sieht noch besser aus. Meine Frage ist: Wie kann ich auf init() wenn mein Steuerelement Style auf Bold gesetzt hat oder nicht, so kann ich den angeforderten TypeFace zuweisen?

    Danke für deine Zeit.

    LE Nach dem folgenden Beispiel habe ich meine Klasse als:

     public class MyTextView extends TextView { Typeface normalTypeface = Typeface.createFromAsset(getContext().getAssets(), Constants.FONT_REGULAR); Typeface boldTypeface = Typeface.createFromAsset(getContext().getAssets(), Constants.FONT_BOLD); public MyTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public MyTextView(Context context, AttributeSet attrs) { super(context, attrs); } public MyTextView(Context context) { super(context); } public void setTypeface(Typeface tf, int style) { if (style == Typeface.BOLD) { super.setTypeface(boldTypeface/*, -1*/); } else { super.setTypeface(normalTypeface/*, -1*/); } } } 

    Nun, wenn ich debugge, geht die App in setTypeFace und es scheint, die kühne anzuwenden, aber auf meinem Layout kann ich keine Veränderung sehen, nicht fett. Egal, welche Schriftart ich benutze, keine Änderungen werden in meinem TextView durchgeführt und werden mit dem Standard-androiden Schriftart angezeigt. Ich wundere mich warum ?

    Ich habe alles auf einem Blog-Post hier auf meinem Blog summiert, vielleicht wird es jemandem helfen.

  • Android WebView gibt immer null für Javascript getElementById auf loadUrl zurück
  • Dagger 2 erzeugte Testkomponente wurde nicht erkannt
  • Android Warnung: Überprüfen Sie die Oberfläche infomation create = false
  • So vermeiden Sie das Laden von Cache-App-Daten aus Google Drive
  • Android Ein ausziehbares XML aus mehreren Bitmaps
  • Wann wird die onCreate () - Methode von Application aufgerufen?
  • 3 Solutions collect form web for “Custom Fonts und benutzerdefinierte Textview auf Android”

    Der Konstruktor von TextView ruft setTypeface(Typeface tf, int style) mit dem style Parameter auf, der aus dem XML-Attribut android:textStyle abgerufen wird. Also, wenn du diesen Anruf abfangen willst, um deine eigene Schrift zu erzwingen, kannst du diese Methode wie folgt überschreiben:

     public void setTypeface(Typeface tf, int style) { Typeface normalTypeface = Typeface.createFromAsset(getContext().getAssets(), "font/your_normal_font.ttf"); Typeface boldTypeface = Typeface.createFromAsset(getContext().getAssets(), "font/your_bold_font.ttf"); if (style == Typeface.BOLD) { super.setTypeface(boldTypeface/*, -1*/); } else { super.setTypeface(normalTypeface/*, -1*/); } } 

    Sie können meine CustomTextView , mit der Sie einen Font-Dateinamen in Ihrem CustomTextView Ordner angeben können:

    https://github.com/mafshin/CustomTextView

    Und der Gebrauch ist wirklich einfach:

     <com.my.app.CustomTextView xmlns:custom="http://schemas.android.com/apk/res/com.my.app" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Test text" android:id="@+id/testcustomview" custom:fontAssetName="Politica XT.otf" /> 

    Ich denke, es ist besser, dein eigenes Paket für benutzerdefinierte Schriften zu erstellen und sie in deinem Projekt zu importieren, damit du sie später in Zukunft nutzen kannst

      package com.codeslips.utilities; import android.content.Context; import android.graphics.Typeface; import android.util.AttributeSet; import android.widget.TextView; public class CustomTextView extends TextView { public CustomTextView(Context context) { super(context); setFont(); } public CustomTextView(Context context,AttributeSet set) { super(context,set); setFont(); } public CustomTextView(Context context,AttributeSet set,int defaultStyle) { super(context,set,defaultStyle); setFont(); } private void setFont() { Typeface typeface=Typeface.createFromAsset(getContext().getAssets(),"fonts/your-font.ttf"); setTypeface(typeface); //function used to set font } } 

    Verwenden Sie nun die obige Klasse in Ihrer XML-Datei, um Ihre benutzerdefinierte Schriftart zu haben

      <com.codeslips.utilities.CustomTextView android:layout_width="wrap_content" android:layout_height="match_parent" android:text="Upload Image" android:paddingTop="10sp" android:textSize="14sp" android:layout_weight="0.7" android:textColor="@android:color/white"/> 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.