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.
- Abra la
app/src/main/res/layout/you_awesome_layout.xml
- Seleccione la
Design tab
- En el panel del árbol de componentes, abra
TextView
y seleccioneView all attributes
en la parte inferior del menú de la derecha - En el panel Atributos, abra el
fontFamily
desplegablefontFamily
y seleccioneMore Fonts…
- Seleccione la familia
YouFontFamilyName
- 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();