Skip to content Skip to sidebar Skip to footer

What Is The Equivalent Of "android:fontfamily="sans-serif-light" In Java Code?

My question is quite simple: In every of my textview, I am currently using the attribute android:fontFamily='sans-serif-light' to provide a gorgeous look on post HC devices. Unf

Solution 1:

It should be possible with setTypeface() and Typeface.create():

convertView.setTypeface(Typeface.create("sans-serif-light", Typeface.NORMAL));

See Docs:

Create a typeface object given a family name, and option style information. If null is passed for the name, then the "default" font will be chosen. The resulting typeface object can be queried (getStyle()) to discover what its "real" style characteristics are.

Note that excessively using Typeface.create() is bad for your memory, as stated in this comment. The suggested Hashtable is a good solution, but you have to modify it a little since you don't create your typeface from an asset.

Solution 2:

Android 4.1 (API Level 16) and Support Library 26 and higher

If you are using res -> font folder, you can use like this

valtypeface= ResourcesCompat.getFont(Context, R.font.YOUR_FONT)
  TextView.setTypeface(typeface)

Solution 3:

In my opinion there is still a way to apply system fonts programatically on TextView without having any memory issue and that is using textview.setTextAppearance method :

<stylename="styleA"><itemname="android:fontFamily">sans-serif</item><itemname="android:textStyle">bold</item><itemname="android:textColor">?android:attr/textColorPrimary</item></style><stylename="styleB"><itemname="android:fontFamily">sans-serif-light</item><itemname="android:textStyle">normal</item><itemname="android:textColor">?android:attr/textColorTertiary</item></style>


if(condition){
    textView.setTextAppearance(context,R.style.styleA);
}else{
    textView.setTextAppearance(context,R.style.styleB);
}

Solution 4:

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

ForCustom font:

 TextView tv = ((TextView) v.findViewById(R.id.select_item_title));
 Typeface face=Typeface.createFromAsset(getAssets(),"fonts/mycustomfont.ttf"); 
 tv.setTypeface(face);

ForDefault 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.ttf2  cursive                     DancingScript-Regular.ttf3  monospace                   DroidSansMono.ttf4  sans-serif                  Roboto-Regular.ttf5  sans-serif-black            Roboto-Black.ttf6  sans-serif-condensed        RobotoCondensed-Regular.ttf7  sans-serif-condensed-light  RobotoCondensed-Light.ttf8  sans-serif-light            Roboto-Light.ttf9  sans-serif-medium           Roboto-Medium.ttf10  sans-serif-smallcaps       CarroisGothicSC-Regular.ttf11  sans-serif-thin            Roboto-Thin.ttf12  serif                      NotoSerif-Regular.ttf13  serif-monospace            CutiveMono.ttf

"mycustomfont.ttf" is the ttf file. Path will be in src/assets/fonts/mycustomfont.ttf , you can refer more about default font in this Default font family

Solution 5:

Option 1 - API 26 and higher

// JaveTypefacetypeface= getResources().getFont(R.font.myfont);
textView.setTypeface(typeface);

// Kotlinvaltypeface= resources.getFont(R.font.myfont)
textView.typeface = typeface

Option 2 - API 16 and higher

// JavaTypefacetypeface= ResourcesCompat.getFont(context, R.font.myfont);

// Kotlinvaltypeface= ResourcesCompat.getFont(context, R.font.myfont)

Check the full expiation at Android Developers Guide.

Post a Comment for "What Is The Equivalent Of "android:fontfamily="sans-serif-light" In Java Code?"