73 votes

Comment utiliser les poids spécifiés pour les polices en XML

En utilisant les Polices de caractères au format XML , vous pouvez spécifier différentes polices de poids pour une famille de police. Par exemple:

<?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>

Mais je ne peux pas comprendre comment faire usage de chacun de ces poids; soit dans un format XML (présentation/style) de fichier, ou dans du code Java. N'est pas leur fontWeight attribut disponible pour TextView, et l' Typeface objet créé à partir d' ResourcesCompat.getFont(context, R.font.archivo_narrow) a aucune mention de police de poids.

Je me rends compte que je peux juste spécifier les polices de caractères particulières de ressources (c'est à dire R.font.archivo_narrow_semibold), mais alors quel est l'intérêt d'avoir un fontWeight de l'attribut dans l' font-family?


Mise à jour

Une nouvelle statique create(Typeface family, int weight, boolean italic) méthode a été ajouté dans l'API de Niveau 28, avec un getWeight() méthode d'instance. Cette offre enfin la possibilité de faire usage de la fontWeight d'attribut dans du code Java; mais seulement pour les API de Niveau 28 et au-dessus, je n'ai pas trouvé d'analogues dans la bibliothèque de prise en charge.

C'est utile-et montre que l' fontWeight attribut n'a pas lieu d'être dans le passé-mais je voudrais vraiment être en mesure d'utiliser le poids en XML style.

66voto

Rajesh Dalsaniya Points 525

Sa ressemble à android suivant les standards du web pour la gestion des polices et la taille pour les applications android.

Le "font-weight" est utilisé pour définir le poids d'une police de caractères, tels que normal ou gras.

Mais pour tous les autres poids numérique de la gamme de 100 à 900 est utilisé. L'un des défis avec des polices web, c'est que la plupart des navigateurs web ne sont pas correctement en charge de la police de poids d'autres que la normale et audacieuse. Le tableau suivant décrit les possibles mappages de poids vers le numérique définitions:

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

Vous pouvez en lire plus à propos de la police de poids ici


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>

Kotlin Utilisation:

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

Projet Android Capture D'Écran:

enter image description here

24voto

Bryan Points 7142

Comme l'a souligné @FlorianWalther, l' textFontWeight attribut est exactement ce que je cherchais. Cet attribut a apparemment été ajouté dans l'API de niveau 28, mais n'a pas été documentée jusqu'à récemment.

Assurez-vous que tous les poids sont dans le même fichier XML (comme dans ma question), puis il suffit d'utiliser l'attribut avec l' fontFamily d'attribut.

<TextView android:id="@+id/weightedTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:fontFamily="@font/archivo_narrow"
    android:textFontWeight="700"/>

Pour autant que je suis conscient de cet attribut est uniquement disponible dans l'API de Niveau 28 un au-dessus, je mettrai à jour si je trouve sa contrepartie dans la bibliothèque de prise en charge.

1voto

kmg Points 795

Edit: ce n'est pas une solution de la la demande :/

J'ai trouvé la Police de caractères.Constructeur de la classe qui, je pense, est ce que vous voulez. Malheureusement, il est disponible uniquement à partir de l'API de niveau 26 et. Peut-être un compat bibliothèque apparaîtra bientôt.

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

0voto

voici comment vous pouvez l'utilisateur de police différente du poids dans android studio

  1. Ouvrez app/src/main/res/layout/you_awesome_layout.xml
  2. Sélectionnez l' Design tab
  3. Dans le Volet de l'Arborescence de panneau, vous TextView et sélectionnez View all attributes au bas du menu de droite
  4. Dans le panneau options, ouvrez l' fontFamily liste déroulante et sélectionnez More Fonts…
  5. Sélectionnez la famille YouFontFamilyName
  6. Sélectionnez le style Regular/Bold/Semibold/Black/WhateverStyleYouHaveThere

Voila, je pense que c'est la seule façon d'obtenir ce que vous voulez

-1voto

Prakash Sharma Points 133

Étape 1: Trouver ou Télécharger votre police de caractères, disons cavier_dream

Étape 2: faites un clic Droit sur le dossier res et de créer de la ressource de police le dossier dans le dossier res

Étape 3: faites un clic Droit sur le dossier de police et de créer un fichier de ressources de police, disons app_font.xml

Étape 4: Ouvrez le app_font.xml fichier et de le modifier comme suit

<?xml version="1.0" encoding="utf-8"?>

<font
    android:font="@font/cavier_dream"
    android:fontWeight="400"
    android:fontStyle="normal"
    app:fontWeight="400"
    app:fontStyle="normal"
    app:font="@font/cavier_dream"/>

Utilisation:

Pour l'utilisation mondiale à travers l'application aller à la styles.xml et à l'intérieur du thème, de créer une nouvelle rubrique comme suit

 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:fontFamily">@font/app_font</item>
</style>

Et pour des usages locaux, utilisez simplement le fontFamily de l'attribut et de l'ensemble de la app_font comme valeur.

Amusez-vous bien:)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X