346 votes

Comment définir la famille de polices par défaut pour l'ensemble de l'application Android ?

J'utilise la police Roboto light dans mon application. Pour définir la police, je dois ajouter la balise android:fontFamily="sans-serif-light" à chaque vue. Existe-t-il un moyen de déclarer la police Roboto comme famille de polices par défaut pour toute l'application ? J'ai déjà essayé de le faire, mais cela ne semble pas fonctionner.

<style name="AppBaseTheme" parent="android:Theme.Light"></style>

<style name="AppTheme" parent="AppBaseTheme">
    <item name="android:fontFamily">sans-serif-light</item>
</style>

2 votes

Cela pourrait vous aider : stackoverflow.com/a/16883281/1329733

2 votes

Vous pouvez désormais spécifier des polices personnalisées directement à partir du XML dans Android studio 3.0. developer.Android.com/guide/topics/ui/look-and-feel/

2voto

Irvan Dwi Pangga Points 120

C'est le travail pour mon projet, source https://gist.github.com/artem-zinnatullin/7749076

Créez un répertoire de polices dans le dossier Asset, puis copiez votre police personnalisée dans le répertoire de polices, par exemple, j'utilise trebuchet.ttf ;

Créez une classe TypefaceUtil.java ;

import android.content.Context;
import android.graphics.Typeface;
import android.util.Log;

import java.lang.reflect.Field;
public class TypefaceUtil {

    public static void overrideFont(Context context, String defaultFontNameToOverride, String customFontFileNameInAssets) {
        try {
            final Typeface customFontTypeface = Typeface.createFromAsset(context.getAssets(), customFontFileNameInAssets);

            final Field defaultFontTypefaceField = Typeface.class.getDeclaredField(defaultFontNameToOverride);
            defaultFontTypefaceField.setAccessible(true);
            defaultFontTypefaceField.set(null, customFontTypeface);
        } catch (Exception e) {

        }
    }
}

Modifier le thème dans styles.xml ajouter ci-dessous

<item name="android:typeface">serif</item>

Exemple dans mon fichier styles.xml

<resources>

    <!-- Base application theme. -->
    <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>
        <item name="android:typeface">serif</item><!-- Add here -->
    </style>

    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowActionBarOverlay">true</item>
        <item name="android:windowFullscreen">true</item>
    </style>
</resources>

Enfin, dans Activity ou Fragment onCreate, appelez TypefaceUtil.java.

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TypefaceUtil.overrideFont(getContext(), "SERIF", "fonts/trebuchet.ttf");
    }

1voto

Phileo99 Points 319

Android ne fournit pas beaucoup de support pour l'application de polices à l'ensemble de l'application (voir cet article). numéro ). Vous disposez de 4 options pour définir la police de l'ensemble de l'application :

  • Option1 : Appliquer la réflexion pour changer la police du système
  • Option2 : Créer et sous-classer des classes de vue personnalisées pour chaque vue qui nécessite une police personnalisée.
  • Option3 : Implémenter un View Crawler qui parcourt la hiérarchie des vues pour l'écran actuel. de l'écran actuel
  • Option4 : Utiliser une bibliothèque tierce.

Les détails de ces options peuvent être trouvés aquí .

0voto

FonzTech Points 289

Je sais que cette question est assez ancienne, mais j'ai trouvé une solution intéressante. En gros, vous passez une mise en page conteneur à cette fonction, et elle appliquera la police à toutes les vues prises en charge, et récursivement dans les mises en page enfants :

public static void setFont(ViewGroup layout)
{
    final int childcount = layout.getChildCount();
    for (int i = 0; i < childcount; i++)
    {
        // Get the view
        View v = layout.getChildAt(i);

        // Apply the font to a possible TextView
        try {
            ((TextView) v).setTypeface(MY_CUSTOM_FONT);
            continue;
        }
        catch (Exception e) { }

        // Apply the font to a possible EditText
        try {
            ((TextView) v).setTypeface(MY_CUSTOM_FONT);
            continue;
        }
        catch (Exception e) { }

        // Recursively cicle into a possible child layout
        try {
            ViewGroup vg = (ViewGroup) v;
            Utility.setFont(vg);
            continue;
        }
        catch (Exception e) { }
    }
}

0voto

Eric Points 2795

pour simplement définir la police de caractères de l'application à normal , sans , serif ou monospace (pas à une police personnalisée !), vous pouvez le faire.

définir un thème et définir les android:typeface à la police de caractères que vous voulez utiliser dans styles.xml :

<resources>

    <!-- custom normal activity theme -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <!-- other elements -->
        <item name="android:typeface">monospace</item>
    </style>

</resources>

appliquer le thème à l'ensemble de l'application dans le AndroidManifest.xml fichier :

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application
        android:theme="@style/AppTheme" >
    </application>
</manifest>

Référence Android

-1voto

Sanny Nagveker Points 352

Essayez cette bibliothèque, elle est légère et facile à mettre en œuvre.

https://github.com/sunnag7/FontStyler

<com.sunnag.fontstyler.FontStylerView
              android:textStyle="bold"
              android:text="@string/about_us"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:paddingTop="8dp"
              app:fontName="Lato-Bold"
              android:textSize="18sp"
              android:id="@+id/textView64" />

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