studio font family developer android typeface

developer - ¿Qué es el equivalente de "android: fontFamily=" sans-serif-light "en código Java?



roboto font android (5)

Mi pregunta es bastante simple:

En cada una de mis textview, actualmente estoy usando el atributo

android:fontFamily="sans-serif-light"

para proporcionar una apariencia hermosa en dispositivos HC posteriores.

Desafortunadamente, esto no funciona con cada widget y para mis Spinners, necesito sobrescribir el adaptador.

@Override public View getView(int position, View convertView, ViewGroup parent) { //You can use the new tf here. if(convertView == null || convertView.getTag() == null) { // new view - populate convertView = inflater.inflate(android.R.layout.simple_spinner_dropdown_item, parent, false); convertView.setTag(new Object()); } CheckedTextView spinner_text=(CheckedTextView) convertView.findViewById(android.R.id.text1); //Typeface should be set here... return spinner_text; } }

Entonces, ¿hay alguna manera de obtener exactamente el mismo resultado por código?

PD: No, no quiero poner un tipo de letra en la carpeta de activos, solo quiero usar el sistema uno.


Android 4.1 (Nivel API 16) y Biblioteca de soporte 26 y superior

Si está utilizando la carpeta res -> font, puede usar esto

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


Debería ser posible con setTypeface() y Typeface.create() :

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

Ver Docs :

Cree un objeto de tipo de letra con un nombre de familia e información de estilo de opción. Si se pasa null para el nombre, entonces se elegirá la fuente "predeterminada". El objeto tipográfico resultante puede ser consultado ( getStyle() ) para descubrir cuáles son sus características de estilo "real".

Tenga en cuenta que usar excesivamente Typeface.create() es malo para su memoria, como se indica en este comentario . El Hashtable sugerido es una buena solución, pero debe modificarlo un poco ya que no crea su tipo de letra a partir de un activo.


Dinámicamente puedes establecer la familia de fuentes similar a android: fontFamily en xml usando esto,

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

Estas son la lista de familias de fuentes predeterminadas utilizadas, utilice cualquiera de estas sustituyendo la cadena de comillas dobles "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" es el archivo ttf. La ruta estará en src / assets / fonts / mycustomfont.ttf , puede consultar más acerca de la fuente predeterminada en esta familia de fuentes predeterminada


En mi opinión, todavía hay una manera de aplicar las fuentes del sistema programáticamente en TextView sin tener ningún problema de memoria y que está utilizando el método textview.setTextAppearance :

<style name="styleA"> <item name="android:fontFamily">sans-serif</item> <item name="android:textStyle">bold</item> <item name="android:textColor">?android:attr/textColorPrimary</item> </style> <style name="styleB"> <item name="android:fontFamily">sans-serif-light</item> <item name="android:textStyle">normal</item> <item name="android:textColor">?android:attr/textColorTertiary</item> </style> if(condition){ textView.setTextAppearance(context,R.style.styleA); }else{ textView.setTextAppearance(context,R.style.styleB); }


Sería posible mediante el uso de

setTypeface(Typeface tf, int style) de la clase TextView .

spinner_text.setTypeface(Typeface.SANS_SERIF,Typeface.NORMAL);