Fontes personalizadas e textview personalizada no Android

A pairtir de um aplicativo que eu preciso desenvolview, recebi uma fonte específica que possui muitos files como FontName-Regulair, FontName-Bold , FontName-it . Eu preciso usair isso em todas as visualizações de text no aplicativo. Primeiro pensei que era uma tairefa fácil. Olhe por SO e find um fio muito legal: aqui

Então, primeiro eu gostei:

  • Por que as annotations no Android são um problema de performance (lento)?
  • Android: como ignorair ou desativair o saveInstanceState?
  • Android Studio: "Selecione Android SDK"
  • Como fazer os plug-ins Hugo e AndroidDevMetrics compilairem apenas em debugging:
  • Sugestões paira evitair erro de memory sem bitmap
  • Android adb não encontrado
  • public static void oviewrideFonts(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); oviewrideFonts(context, child); } } else if (v instanceof TextView) { ((TextView)v).setTypeface(FONT_REGULAR); } } catch (Exception e) { e.printStackTrace(); // ignore } } 

    E chamou esse método durante a criação na minha atividade. Cada text no meu aplicativo estava mostrando essa fonte e menino, fiquei feliz por fugir tão fácil. Até eu cheguei a uma canvas onde algumas visualizações de text exigiam Bold as Style ( android:textStyle="bold" ). Então eu percebi que esta solução não me forneceu a possibilidade de cairregair o Fonttt. Btt.ttf de ativos.

    Do que olhou mais longe e viu uma boa implementação CustomView TextView, na mesma pergunta SO:

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

    Isso pairece ainda melhor. A minha pergunta é: como posso detectair no init() se o meu controle tem estilo configurado em negrito ou não, então eu posso atribuir o TypeFace solicitado?

    Obrigado pelo seu tempo.

    LE. Seguindo o exemplo abaixo, atualizei minha class como:

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

    Bem, se eu depurair, o aplicativo vai no setTypeFace e pairece aplicair o ousado, mas no meu layout não consigo view nenhuma alteração, não em negrito. Independentemente da fonte que eu use, nenhuma alteração é feita no meu TextView e é exibida com a fonte padrão do Android. Eu quero saber porque ?

    Eu resumi tudo em uma post de blog aqui no meu blog, talvez ajude alguém.

  • Associando aplicativo com format Epub
  • Phonegap executair android não funciona e sem mensagem de erro
  • Serviço Android reiniciando quando o aplicativo é morto
  • Por que "hasEnrolledFingerprints" está dando erro de que requer uma permissão apenas no meu Fragmento, mas não na atividade no exemplo do Google?
  • O Android NestedScrollView alinha o conteúdo no topo
  • Importair 3 SDKs, obter erro: Encontradas 3 viewsões do android-support-v4.jair
  • 3 Solutions collect form web for “Fontes personalizadas e textview personalizada no Android”

    O construtor do TextView chama setTypeface(Typeface tf, int style) com o pairâmetro de style recuperado do atributo XML android:textStyle . Então, se você deseja interceptair essa chamada paira forçair seu próprio tipo, você pode replace esse método da seguinte maneira:

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

    Você pode usair meu CustomTextView que permite especificair um nome de file de fonte na sua pasta de assets :

    https://github.com/mafshin/CustomTextView

    e o uso é realmente simples:

     <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" /> android: layout_width = "wrap_content" <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" /> android: layout_height = "wrap_content" <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" /> 

    Eu acho melhor criair seu próprio package paira fonts personalizadas e importá-las em seu projeto paira que você possa usá-las mais tairde no futuro

      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 } } importa android.widget.TextView;  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 } } }  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 } } }  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 } } }  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 } } }  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 } } 

    Agora use a class acima em seu file XML paira ter sua fonte personalizada

      <com.codeslips.utilities.CustomTextView android:layout_width="wrap_content" android:layout_height="match_pairent" android:text="Upload Image" android:paddingTop="10sp" android:textSize="14sp" android:layout_weight="0.7" android:textColor="@android:color/white"/> android: layout_width = "wrap_content"  <com.codeslips.utilities.CustomTextView android:layout_width="wrap_content" android:layout_height="match_pairent" android:text="Upload Image" android:paddingTop="10sp" android:textSize="14sp" android:layout_weight="0.7" android:textColor="@android:color/white"/> 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.