studio programacion para móviles libro español edición desarrollo curso aplicaciones android android-xml android-styles android-fonts

android - programacion - Cómo usar pesos especificados para fuentes en XML



manual programacion android español pdf (3)

Al utilizar la función Fuentes en XML , puede especificar varios pesos de fuente para una familia de fuentes. Por ejemplo:

<?xml version="1.0" encoding="utf-8"?> <font-family xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <font android:font="@font/archivo_narrow_regular" android:fontWeight="400" android:fontStyle="normal" app:font="@font/archivo_narrow_regular" app:fontWeight="400" app:fontStyle="normal"/> <font android:font="@font/archivo_narrow_regular_italic" android:fontWeight="400" android:fontStyle="italic" app:font="@font/archivo_narrow_regular_italic" app:fontWeight="400" app:fontStyle="italic"/> <font android:font="@font/archivo_narrow_medium" android:fontWeight="500" android:fontStyle="normal" app:font="@font/archivo_narrow_medium" app:fontWeight="500" app:fontStyle="normal"/> <font android:font="@font/archivo_narrow_medium_italic" android:fontWeight="500" android:fontStyle="italic" app:font="@font/archivo_narrow_medium_italic" app:fontWeight="500" app:fontStyle="italic"/> <font android:font="@font/archivo_narrow_semibold" android:fontWeight="600" android:fontStyle="normal" app:font="@font/archivo_narrow_semibold" app:fontWeight="600" app:fontStyle="normal"/> <font android:font="@font/archivo_narrow_semibold_italic" android:fontWeight="600" android:fontStyle="italic" app:font="@font/archivo_narrow_semibold_italic" app:fontWeight="600" app:fontStyle="italic"/> <font android:font="@font/archivo_narrow_bold" android:fontWeight="700" android:fontStyle="normal" app:font="@font/archivo_narrow_bold" app:fontWeight="700" app:fontStyle="normal"/> <font android:font="@font/archivo_narrow_bold_italic" android:fontWeight="700" android:fontStyle="italic" app:font="@font/archivo_narrow_bold_italic" app:fontWeight="700" app:fontStyle="italic"/> </font-family>

Pero no puedo averiguar cómo hacer uso de cada uno de estos pesos; ya sea en un archivo XML (diseño / estilo), o en código Java. No hay ningún atributo fontWeight disponible para TextView , y el objeto Typeface creado desde ResourcesCompat.getFont(context, R.font.archivo_narrow) no menciona los pesos de las fuentes.

Me doy cuenta de que solo puedo especificar el recurso de fuente específico (es decir, R.font.archivo_narrow_semibold ), pero ¿cuál es el punto de tener un atributo fontWeight en la font-family ?

Actualizar

Se agregó un getWeight() método de create(Typeface family, int weight, boolean italic) estática create(Typeface family, int weight, boolean italic) en el Nivel 28 de API, junto con un método de instancia getWeight() . Esto finalmente hace posible hacer uso del atributo fontWeight en el código Java; aunque solo para API Nivel 28 y superior, no he encontrado ningún análogo en la biblioteca de soporte.

Esto es útil, y muestra que el atributo fontWeight no tuvo ningún propósito en el pasado, pero realmente me gustaría poder usar el peso en el estilo XML.


Aquí puedes ver los pesos de diferentes fuentes en Android Studio.

  1. Abra la app/src/main/res/layout/you_awesome_layout.xml
  2. Seleccione la Design tab
  3. En el panel del árbol de componentes, abra TextView y seleccione View all attributes en la parte inferior del menú de la derecha
  4. En el panel Atributos, abra el fontFamily desplegable fontFamily y seleccione More Fonts…
  5. Seleccione la familia YouFontFamilyName
  6. Seleccione el estilo Regular/Bold/Semibold/Black/WhateverStyleYouHaveThere

Voila, creo que esta es la única manera de lograr lo que quieres


Se ve como Android siguiendo los estándares web para la gestión de fuentes y el tamaño de la aplicación de Android.

La propiedad "font-weight" se usa para definir el peso de una fuente, como regular o negrita.

Pero para todos los demás pesos se utiliza un rango numérico de 100 a 900. Uno de los desafíos con las fuentes web es que la mayoría de los navegadores web no admiten correctamente el peso de las fuentes que no sean normales y en negrita. El siguiente cuadro describe las posibles asignaciones de pesos a las definiciones numéricas:

100 Extra Light or Ultra Light 200 Light or Thin 300 Book or Demi 400 Normal or Regular 500 Medium 600 Semibold, Demibold 700 Bold 800 Black, Extra Bold or Heavy 900 Extra Black, Fat, Poster or Ultra Black

Puedes leer más sobre el peso de la fuente here

cc_montserrat_bold.xml

<?xml version="1.0" encoding="utf-8"?> <font-family xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <font android:font="@font/montserrat_bold" android:fontStyle="normal" android:fontWeight="700" app:font="@font/montserrat_bold" app:fontStyle="normal" app:fontWeight="700" /> <font android:font="@font/montserrat_bolditalic" android:fontStyle="italic" android:fontWeight="700" app:font="@font/montserrat_bolditalic" app:fontStyle="italic" app:fontWeight="700" /> </font-family>

cc_montserrat_regular.xml

<?xml version="1.0" encoding="utf-8"?> <font-family xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <font android:font="@font/montserrat_regular" android:fontStyle="normal" android:fontWeight="400" app:font="@font/montserrat_regular" app:fontStyle="normal" app:fontWeight="400" /> <font android:font="@font/montserrat_italic" android:fontStyle="italic" android:fontWeight="400" app:font="@font/montserrat_italic" app:fontStyle="italic" app:fontWeight="400" /> </font-family>

Uso de Kotlin:

val textView = dialog.findViewById<TextView>(android.R.id.message) as TextView val typeface = ResourcesCompat.getFont(context,R.font.cc_montserrat_regular) textView.typeface = typeface

Captura de pantalla del proyecto Android:


Edición: esto no es una solución de la solicitud: /

He encontrado la clase Typeface.Builder que creo que es lo que quieres. Desafortunadamente, solo está disponible a partir del nivel 26 de API. Tal vez una biblioteca de compatibilidad aparecerá pronto.

https://developer.android.com/reference/android/graphics/Typeface.Builder.html

Typeface.Builder buidler = new Typeface.Builder("your_font_file.ttf"); builder.setFontVariationSettings("''wght'' 700, ''slnt'' 20, ''ital'' 1"); builder.setWeight(700); // Tell the system that this is a bold font. builder.setItalic(true); // Tell the system that this is an italic style font. Typeface typeface = builder.build();