Utilisation d'une police personnalisée

Fermé
YameFAZE Messages postés 201 Date d'inscription mardi 24 avril 2012 Statut Membre Dernière intervention 14 mars 2021 - 17 mars 2017 à 16:48
BunoCS Messages postés 15474 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 22 avril 2024 - 28 mars 2017 à 16:01
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 ?
A voir également:

13 réponses

BunoCS Messages postés 15474 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 22 avril 2024 3 894
17 mars 2017 à 17:15
Si ^^

Utilises Calligraphy
0
YameFAZE Messages postés 201 Date d'inscription mardi 24 avril 2012 Statut Membre Dernière intervention 14 mars 2021
17 mars 2017 à 17:28
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...
0
BunoCS Messages postés 15474 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 22 avril 2024 3 894
17 mars 2017 à 17:36
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 ;)
0
YameFAZE Messages postés 201 Date d'inscription mardi 24 avril 2012 Statut Membre Dernière intervention 14 mars 2021
18 mars 2017 à 19:10
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BunoCS Messages postés 15474 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 22 avril 2024 3 894
Modifié par BunoCS le 20/03/2017 à 09:28
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...
0
YameFAZE Messages postés 201 Date d'inscription mardi 24 avril 2012 Statut Membre Dernière intervention 14 mars 2021
23 mars 2017 à 14:43
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));
}
}
}
0
BunoCS Messages postés 15474 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 22 avril 2024 3 894
Modifié par BunoCS le 23/03/2017 à 15:01
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...
0
YameFAZE Messages postés 201 Date d'inscription mardi 24 avril 2012 Statut Membre Dernière intervention 14 mars 2021
27 mars 2017 à 01:28
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.

0
BunoCS Messages postés 15474 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 22 avril 2024 3 894
27 mars 2017 à 09:33
Euh..
Si tu mets ta ligne AVANT l'accolade fermante du bloc 'dependencies', hum? ;)
0
YameFAZE Messages postés 201 Date d'inscription mardi 24 avril 2012 Statut Membre Dernière intervention 14 mars 2021
27 mars 2017 à 19:41
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.
0
BunoCS Messages postés 15474 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 22 avril 2024 3 894
28 mars 2017 à 09:21
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 ;)
0
YameFAZE Messages postés 201 Date d'inscription mardi 24 avril 2012 Statut Membre Dernière intervention 14 mars 2021
28 mars 2017 à 15:13
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 ?
0
BunoCS Messages postés 15474 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 22 avril 2024 3 894
28 mars 2017 à 16:01
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
0