What Is The Equivalent Of "android:fontfamily="sans-serif-light" In Java Code?
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?"