Set font at runtime, TextView

前端 未结 9 665
温柔的废话
温柔的废话 2020-11-29 22:00

How to set the font of a TextView created at runtime?

I created a TextView

Textview tv = new TextView(this);      
tv.setTextSize(20);

相关标签:
9条回答
  • 2020-11-29 22:03

    Here is a small utility class

    public class TypefaceHelper {
    
        public static void setViewGroupTypeface(ViewGroup container, Typeface typeface) {
            final int children = container.getChildCount();
    
            for (int i = 0; i < children; i++) 
                View child = container.getChildAt(i);
    
                if (child instanceof TextView) {
                    setTextViewTypeface((TextView) child, typeface);
                } else if (child instanceof ViewGroup) {
                    setViewGroupTypeface((ViewGroup) child, typeface);
                }
            }
        }
    
        public static void setTextViewTypeface(TextView textView, Typeface typeface) {
            textView.setTypeface(typeface);
        }
    
    }
    

    For things like Spinners or ListViews (i.e. any kind of AdapterView) which generate their children from an adapter you will need to set the typeface of each item View in the getView (or similar) method of the adapter. This is because views may be created as needed and so setting the Typeface in onCreate won't work properly.

    0 讨论(0)
  • 2020-11-29 22:03

    If you don't want to use typeface and fiddle around with the path to your font file (Which may crash your application if you put in an incorrect path), here's another way.

    First create a style in your styles.xml

    <style name="YourFont">
        <item name="android:fontFamily">@font/your_font</item>
    </style>
    

    Then you can just add the style using

    textView.setTextAppearance(context, R.style.YourFont);
    
    0 讨论(0)
  • 2020-11-29 22:07

    You can have .ttf font in your asset folder. Say font's name is "default.ttf" and you just now have to write below 2 lines of code

    TextView text = new TextView(this);
    text.setTypeface(Typeface.createFromAsset(getAssets(), "default.ttf"));
    

    You must also we careful because different font have different sizes. You may need to set size as :

    text.setTextSize(20);
    
    0 讨论(0)
  • 2020-11-29 22:10

    you can use your font which you have store in font "res/font" ex. for API level 16 and above.

       Typeface typeface = ResourcesCompat.getFont(context, R.font.rubik_medium);
       txtView.setTypeface(typeface);
    

    you can also use

       Typeface typeface = getResources().getFont(R.font.rubik_medium);
       txtView.setTypeface(typeface);
    

    but it support with API level 26 and above.

    0 讨论(0)
  • 2020-11-29 22:12

    Dynamically you can set the fontfamily similar to android:fontFamily in xml by using this,

    For Custom font:
    
     TextView tv = ((TextView) v.findViewById(R.id.select_item_title));
     Typeface face=Typeface.createFromAsset(getAssets(),"fonts/mycustomfont.ttf"); 
     tv.setTypeface(face);
    
    For Default font:
    
     tv.setTypeface(Typeface.create("sans-serif-medium",Typeface.NORMAL));
    

    These are the list of default font family used, use any of this by replacing the double quotation string "sans-serif-medium"

    FONT FAMILY                    TTF FILE                    
    
    1  casual                      ComingSoon.ttf              
    2  cursive                     DancingScript-Regular.ttf   
    3  monospace                   DroidSansMono.ttf           
    4  sans-serif                  Roboto-Regular.ttf          
    5  sans-serif-black            Roboto-Black.ttf            
    6  sans-serif-condensed        RobotoCondensed-Regular.ttf 
    7  sans-serif-condensed-light  RobotoCondensed-Light.ttf   
    8  sans-serif-light            Roboto-Light.ttf            
    9  sans-serif-medium           Roboto-Medium.ttf           
    10  sans-serif-smallcaps       CarroisGothicSC-Regular.ttf 
    11  sans-serif-thin            Roboto-Thin.ttf             
    12  serif                      NotoSerif-Regular.ttf       
    13  serif-monospace            CutiveMono.ttf              
    

    "mycustomfont.ttf" is the ttf file. Path will be in src/assets/fonts/mycustomfont.ttf

    0 讨论(0)
  • 2020-11-29 22:13

    You need to use Typeface:

    1. add font you wish to use to your project as asset.
    2. create Typeface object using that font:

      Typeface myFont = Typeface.createFromAsset(getAssets(), "fonts/MyFont.ttf");

    3. set typeface to the object you'd like to customize:

      TextView myTextView = (TextView)findViewById(R.id.my_text_view); myTextView.setTypeface(myFont);

    0 讨论(0)
提交回复
热议问题