Utilisation d'une police personnalisée [Fermé]

Signaler
Messages postés
201
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
14 mars 2021
-
Messages postés
15039
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
18 mai 2021
-
Bonjour,

J'aimerais utiliser une police personnalisée pour mon appli. J'ai vu pas mal de tutos sur internet qui reprennent plus ou moins la même méthode, une méthode lourde, déclarer la police pour chaque View où il y a du texte. Un gros s'il y a 50 View avec du texte dans le Layout il faut préciser les 50 Id de chaque View... long. Il n'y a pas une méthode plus simple pour appliquer la police personnalisée sur l'ensemble de l'appli ?

13 réponses

Messages postés
15039
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
18 mai 2021
3 348
Si ^^

Utilises Calligraphy
Messages postés
201
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
14 mars 2021

Merci je vais y jeter un coup d'oeil. J'ai le cerveau qui bouillonne d'idées et chaque idée apporte son lot de questionnement et de recherche et d'appels à l'aide. Cela fait une semaine que je suis bloqué sur la première activité de mon appli, seulement parce que je dois penser à faire le design. J'espère qu'une fois que ce sera fait j'avancerai un peu plus vite...
Messages postés
15039
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
18 mai 2021
3 348
J'ai le cerveau qui bouillonne d'idées et chaque idée apporte son lot de questionnement et de recherche et d'appels à l'aide
Que cela ne t'empêches pas de chercher par toi-même ;)
Messages postés
201
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
14 mars 2021

Bon... je n'arrive pas à comprendre comment ça fonctionne... ça fait 1h que j'y suis. Le problème c'est qu'il y a plein de bouts de code dans l'explicatif et je n'arrive pas à savoir s'il faut faire toutes les étapes de l'explicatif (ce qui serait quand même assez lourd en terme d'écriture), ou bien s'il s'agit de plusieurs méthodes différentes, et bien sûr il y a des termes techniques que j'ai du mal à traduire en français donc difficile pour moi de comprendre le sens des explications.
Messages postés
15039
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
18 mai 2021
3 348
Il n'y a pas tant que ça de code à écrire...

Si tu veux que tous tes textes soient dans ta police custom:
- tu places ton fichier de police dans le rep "assets/fonts"
- dans ta classe
application
, tu mets ceci:
    @Override
    public void onCreate() {
        super.onCreate();
        setupCalligraphy();
    }

    private void setupCalligraphy() {
        CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
                .setDefaultFontPath("fonts/ton_fichier.ttf")
                .setFontAttrId(R.attr.fontPath)
                .build()
        );
    } 

- dans chaque
Activity
(ou mieux, dans une Activity parente):
    @Override
    protected void attachBaseContext(Context newBase) {
        super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
    }

@+ 
Buno, Modo CS-CCM 
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai... 
The urgent is done, the impossible is underway. For miracles, provide for a delay...
Messages postés
201
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
14 mars 2021

Salut,

Visiblement Android Studio a un problème avec
CalligraphyConfig
,
fontPath
,
Context newBase
et
CalligraphyContextWrapper
. Tous ces termes sont en rouge et il ne me propose aucun solution.

Ensuite je ne vois pas ce que tu veux dire par placer le code dans la classe
application
. Dans quel fichier et à quel niveau du code source ? Pareil pour ton second bout de code. Je dois faire quelque chose comme ci-dessous ?
package com.xxxxxxxxxx;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

public class Inscription extends AppCompatActivity
{
@Override
public void onCreate() {
super.onCreate();
setupCalligraphy();
}

private void setupCalligraphy() {
CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
.setDefaultFontPath("fonts/3.ttf")
.setFontAttrId(R.attr.fontPath)
.build()
);
}

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);

setContentView(R.layout.inscription_activity);

@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
}
}
Messages postés
15039
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
18 mai 2021
3 348
J'ai oublié de préciser qu'il fallait rajouter une ligne dans ton Gradle pour pourvoir importer la lib.
compile 'uk.co.chrisjenx:calligraphy:2.2.0'

Tu aurais pu le trouver tout seul, ça ;) Et ne pas oublier les import qui vont bien.

Ensuite, au niveau de l'application, il te faut étendre la classe Application afin de pouvoir rajouter tes initialisations diverses, dont Calligraphy.
import android.app.Application;

public class MyCustomApplication extends Application {
     @Override
    public void onCreate() {
        super.onCreate();
        setupCalligraphy();
    }

    private void setupCalligraphy() {
        CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
                .setDefaultFontPath("fonts/ton_fichier.ttf") // ici, il faut indiquer le nom de ton fichier de police qui se trouve dans le répertoire 'assets'
                .setFontAttrId(R.attr.fontPath)
                .build()
        );
    }
}


Dans le Manifest, il faut modifier la balise application
<application 
   android:name=".MyCustomApplication"
   android:icon="@drawable/icon" 
   android:label="@string/app_name" 
   ...>


Enfin, au lieu de "copier bêtement", une simple relecture t'aurait montré que tu as mis la déclaration de
attachBaseContext()
dedans le
onCreate()
! ça ne risque pas de compiler...
@+ 
Buno, Modo CS-CCM 
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai... 
The urgent is done, the impossible is underway. For miracles, provide for a delay...
Messages postés
201
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
14 mars 2021

Salut,

Bon décidément je ne sais pas si je vais réussir un jour à installer cette foutue police perso... c'est pas croyable de galérer autant juste pour installer une simple police. J'ai un nouveau souci. J'ai modifié le Gradle, synchronisé, et voilà ce qu'Android Studio m'affiche comme message d'erreur.

Messages postés
15039
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
18 mai 2021
3 348
Euh..
Si tu mets ta ligne AVANT l'accolade fermante du bloc 'dependencies', hum? ;)
Messages postés
201
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
14 mars 2021

Tu vas finir par croire que je suis débile... bon, reprenons tout depuis le début, alors...

Dans le fichier java j'ai importé tous les packages :
package com.alexandredubus.helloweride;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import uk.co.chrisjenx.calligraphy.CalligraphyConfig;
import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper;


Dans l'activité principale du fichier java j'ai déclarer ça :
//!\\ Déclaration de l'activité. //!\\
public class Index extends AppCompatActivity
{
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);

setupCalligraphy();

//!\\ Affichage de la page. //!\\
setContentView(R.layout.index_activity);


Juste après l'accolade fermante de
@Override public void onCreate(Bundle savedInstanceState) {
j'ai déclaré ça :
private void setupCalligraphy() {
CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
.setDefaultFontPath("fonts/3.ttf") // ici, il faut indiquer le nom de ton fichier de police qui se trouve dans le répertoire 'assets'
.setFontAttrId(R.attr.fontPath)
.build()
);
}


J'ai modifié le gradle aussi. J'ai modifié aussi le manifest :
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xxxxxxxxxx">
<application
android:name=".MyCustomApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".Index">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".Inscription" />
<activity android:name=".Start" />
</application>
</manifest>


MyCustomApplication
apparaît en rouge dans le manifest. D'habitude j'arrive à comprendre les cours et à les adapter à mon projet mais là... enfin bref.
Messages postés
15039
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
18 mai 2021
3 348
Hello,

Reprends calmement depuis le début:

Dans l'activité principale du fichier java j'ai déclarer ça :
Non! Le
setupCalligraphy()
doit être dans la classe
Application
et non dans l'
Activity
.

Sur le GitHub, il y a un projet d'exemple. L'as-tu regardé?

Avec l'exemple plus le code que je te donne ici, , je ne vois pas ce que je peux faire de plus, à part coder par moi-même ;)

Tu vas finir par croire que je suis débile...
Non, rassures-toi..Mais je pense que tu ne cherches pas assez ;)
Messages postés
201
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
14 mars 2021

De quelle classe
Application
parles-tu ? Je n'ai pas de classe
Application
dans mon projet. C'est un fichier JAVA, XML, ou autre ? C'est un fichier que je dois créer ou qui existe ? C'est ça que je ne comprends pas. Depuis le début en fait je me contente de modifier le JAVA de mon Activity "Index.java", le layout associé "index_activity.xml", le gradle et le manifest... mais il y a encore un autre fichier à modifier ?
Messages postés
15039
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
18 mai 2021
3 348
Tu dois créer une classe Application pour pouvoir initialiser Calligraphy.
Je te l'ai dit ici et c'est écrit dans la doc ici.
Pour le code Java concernant cette classe, tu as un exemple ici
Pour voir le Manifest associé, c'est ici
Le sample complet ici