web-dev-qa-db-fra.com

Utilisation de la police de caractère dans XML dans l'API <26

https://developer.Android.com/preview/features/working-with-fonts.html

L’API Android 26 le permet, mais existe-t-il une bibliothèque d’appui qui peut fournir l’utilisation des polices en tant que ressource dans res? [police en XML] Si oui, quelle API est-elle prise en charge?

Je parle de la fonctionnalité Android O SDK qui nous permet de définir la police dans XML comme indiqué dans le lien ci-dessus. Il ne s’agit pas d’une fonctionnalité native dans MM, c’est certain.

19
sziraqui

Selon Google, il est pris en charge sur Android 4.0+ (API 14+) tant que ces conditions sont remplies:

  • Vous utilisez la bibliothèque de support 26.0.0-beta1 ou une version ultérieure
  • Vous utilisez AppCompat

Sources:

Polices in XML - Utilisation de la bibliothèque de support

Historique des révisions de la bibliothèque de support

J'espérais pouvoir utiliser cela dans les widgets d'applications sur Android antérieures à 8 (API 26), ce n'est toutefois pas possible, car AppCompatTextView ne peut pas être utilisé dans les widgets d'applications. Aucune des alternatives tierces to Android Les "polices XML" de O, telles que la bibliothèque Caligraphie , fonctionnent également dans les widgets de l'application.

La seule alternative aux widgets d'application consiste à utiliser un ImageView au lieu d'un TextView et en utilisant RemoteViews des méthodes telles que setImageViewUri (...) et setImageViewBitmap (...) , les deux sont problématiques.

29
ra3o.ra3

Pour prendre en charge la famille de polices sur API inférieure à 26, nous devons utiliser

<font app:fontStyle="normal" app:fontWeight="400" app:font="@font/myfont-Regular"/>

au lieu de

<font Android:fontStyle="normal" Android:fontWeight="400" Android:font="@font/myfont-Regular"/>
20
Yuri Misyac

Pour compléter la réponse de Yuri, les polices sont restaurées dans l'API 16. Pour créer une famille de polices (dans laquelle différents poids de polices sont spécifiés), vous devez créer my_font_family.xml sous /res/font/ tel qu’écrit dans le document :

<font-family xmlns:app="http://schemas.Android.com/apk/res-auto">
    <font app:fontStyle="normal" app:fontWeight="400" app:font="@font/myfont_regular"/>
    <font app:fontStyle="normal" app:fontWeight="600" app:font="@font/myfont_semi_bold" />
    <font app:fontStyle="italic" app:fontWeight="400" app:font="@font/myfont_italic" />
</font-family>

Pour utiliser ceci dans TextView xml, vous devez utiliser app:fontFamily="@font/my_font_family", attention à app: au lieu de Android:.

Pour choisir spécifique fontWeight, vous pouvez utiliser Android:textFontWeight="200" mais cela ne fonctionne que sur API> = 28. Pour choisir une police différente en fonction de la pondération antérieure à l'API 28, vous avez deux options. Vous pouvez soit utiliser Android:textStyle="bold" pour spécifier uniquement "normal/italic/bold", mais pas le poids exact. Ou vous pouvez directement utiliser un poids de police spécifique comme ceci: app:fontFamily="@font/myfont_semi_bold".

14
Jemshit Iskenderov

Certains utilisateurs accèderont à cette page en cherchant des instructions pour utiliser des polices personnalisées dans votre application à partir de XML. Voici comment je l'ai fait:

Le répertoire des ressources de police n'est pas présent par défaut. Vous pouvez le créer manuellement en suivant le documentation ici [trop de travail]

Ou utilisez le sélecteur de polices de l'interface graphique -

  • Sélectionnez un onglet TextView in Design.

  • Ouvrir la liste déroulante de l'attribut fontFamily xml.

  • Faites défiler jusqu'à "Plus de polices".

  • Choisissez une "police téléchargeable" dans la fenêtre contextuelle qui apparaît.

Android Studio créera automatiquement un répertoire de ressources de polices avec les déclarations nécessaires mentionnées dans la documentation ci-dessus. Après cette étape, vous pouvez copier votre fichier de police personnalisé (par exemple, myfont.ttf) dans le répertoire de police et définir la police souhaitée à partir de xml, par exemple:

<TextView
     Android:fontFamily="@font/myfont"
     Android:id="@+id/aboutus_head_textview"
     Android:layout_width="match_parent"
     Android:layout_height="wrap_content"
     Android:text="@string/who_are_we" />

Si vous souhaitez utiliser la même police dans votre application, vous pouvez définir fontFamily votre AppTheme dans styles.xml:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <!-- custom font for the entire app -->
        <item name="fontFamily">@font/myfont</item>
    </style>

[préfixe fontFamily avec Android: si ci-dessus n'a pas fonctionné]

Captures d'écran:

Screenshot 1

Screenshot 2

Remarque: Cette réponse suppose que vous utilisez Android Studio 3+ et la bibliothèque de support, version 26 +

7
sziraqui

Voici un exemple, min sdk support 18 (in app)

https://github.com/mukundrd/androidFonts

2
Mukund Desai