web-dev-qa-db-fra.com

Comment définir une police personnalisée pour le titre dans la barre d'outils Android

Je fais ça:

toolbar = (Toolbar) findViewById(com.sports.unity.R.id.tool_bar);
setSupportActionBar(toolbar);
setTitle("hello");

Je veux définir une police personnalisée pour le texte ici dans le titre "Bonjour". Comment faire ça?

35
anupam x

Mise à jour 2018 (version kotlin)

fun Toolbar.changeToolbarFont(){
    for (i in 0 until childCount) {
        val view = getChildAt(i)
        if (view is TextView && view.text == title) {
            view.typeface = Typeface.createFromAsset(view.context.assets, "fonts/customFont")
            break
        }
    }
}

et l'utiliser comme ça toolBar.changeToolbarFont()

old-post

Pour utiliser un titre personnalisé dans votre barre d’outils, il suffit de vous rappeler que la barre d’outils n’est qu’un fantastique ViewGroup.

<Android.support.v7.widget.Toolbar
    Android:id="@+id/toolbar_top"
    Android:layout_height="wrap_content"
    Android:layout_width="match_parent"
    Android:minHeight="?attr/actionBarSize"
    Android:background="@color/action_bar_bkgnd"
    app:theme="@style/ToolBarTheme" >


     <TextView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="Toolbar Title"
        Android:layout_gravity="center"
        Android:id="@+id/toolbar_title" />


    </Android.support.v7.widget.Toolbar>

Cela signifie que vous pouvez attribuer un style à la TextView comme vous le souhaitez, car il s’agit simplement d’une TextView normale. Donc, dans votre activité, vous pouvez accéder au titre comme suit:

Toolbar toolbarTop = (Toolbar) findViewById(R.id.toolbar_top);
TextView mTitle = (TextView) toolbarTop.findViewById(R.id.toolbar_title);

Et alors: 

Typeface khandBold = Typeface.createFromAsset(BalrogApplication.getApplication().getAssets(), "fonts/Khand-bold.ttf");

mTitle.setTypeface(khandBold);

UPDATE version dynamique

public static void changeToolbarFont(Toolbar toolbar, Activity context) {
    for (int i = 0; i < toolbar.getChildCount(); i++) {
        View view = toolbar.getChildAt(i);
        if (view instanceof TextView) {
            TextView tv = (TextView) view;
            if (tv.getText().equals(toolbar.getTitle())) {
                applyFont(tv, context);
                break;
            }
        }
    }
}

public static void applyFont(TextView tv, Activity context) {
    tv.setTypeface(Typeface.createFromAsset(context.getAssets(), "fonts/customFont"));
}

et l'utiliser comme ça

changeToolbarFont(findViewById(R.id.app_bar), this);
49
gmetax

Je souhaitais toujours utiliser les méthodes de titre de la barre d'outils (je ne voulais pas non plus avoir de classe de barre d'outils personnalisée), donc l'ajout de l'élément TextView personnalisé à l'intérieur de l'élément xml de la barre d'outils ne me convenait pas. Au lieu de cela, j'ai utilisé la méthode suivante pour trouver le TextView:

public static void applyFontForToolbarTitle(Activity context){
    Toolbar toolbar = (Toolbar) context.findViewById(R.id.app_bar);
    for(int i = 0; i < toolbar.getChildCount(); i++){
        View view = toolbar.getChildAt(i);
        if(view instanceof TextView){
            TextView tv = (TextView) view;
            Typeface titleFont = Typeface.
               createFromAsset(context.getAssets(), "fonts/customFont");
            if(tv.getText().equals(toolbar.getTitle())){
                tv.setTypeface(titleFont);
                break;
            }
        }
    }
}
36
afathman

Depuis Android.support.v7.appcompat 24.2Toolbar a la méthode setTitleTextAppearance et vous pouvez définir sa police sans externe textview.

créer un nouveau style dans styles.xml

<style name="RobotoBoldTextAppearance">
        <item name="Android:fontFamily">@font/roboto_condensed_bold</item>
</style>

et l'utiliser

mToolbar.setTitleTextAppearance(this, R.style.RobotoBoldTextAppearance);
30
Rainmaker

Vous pouvez le faire en utilisant uniquement des thèmes:

J'ai écrit un article décrivant la solution complète. Voici les bases:

1) Définissez un thème dans styles.xml:

<style name="ToolbarTheme" parent="ThemeOverlay.AppCompat.Light">
    <item name="Android:fontFamily">@font/fancy-font</item>
</style>

2) Définissez ce thème dans votre mise en page Toolbars:

<Android.support.v7.widget.Toolbar
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/toolbar"
    Android:layout_width="match_parent"
    Android:layout_height="?attr/actionBarSize"
    Android:background="@color/colorPrimary"
    Android:theme="@style/ToolbarTheme"/>

Cela suppose que vous avez un fichier .ttf stocké dans res/font:

 Resourced directory with font

10
ahaisting

Vous pouvez créer le dossier fonts sous le répertoire res de la dernière version d'Android Studio 3. Vous devez ensuite définir un style personnalisé dans styles, puis utiliser titleTextAppearance dans la barre d'outils. style que vous êtes défini.

Étapes comme ci-dessous.

1. Créer un répertoire de polices: res> Répertoire de ressources Android> Type de ressources: polices, puis cliquez sur Ok pour créer des polices. répertoire (Android studio 3).

  1. Ouvrez styles.xml et créez un style personnalisé comme ci-dessous 

<style name = "TextAppearance.TabsFont" parent = "Android: TextAppearance">

    <item name="Android:fontFamily">font/rmedium</item>
    <item name="Android:textSize">18sp</item>
</style>

3.Maintenant, ouvrez la disposition et ajoutez app: titleTextAppearance = "@ style/TextAppearance.TabsFont" à la balise Toolbar, comme ci-dessous.

<Android.support.v7.widget.Toolbar

    Android:id="@+id/toolbarMain"
    app:title="@string/time_amp_date"
    app:titleTextAppearance="@style/TextAppearance.TabsFont"
    Android:layout_width="match_parent"
    Android:layout_height="?attr/actionBarSize"
    Android:background="@color/colorPrimary"
    Android:theme="@style/AppTheme"
    app:elevation="2dp" />

C'est FAIT. Maintenant, si vous exécutez l'application, vous pouvez voir la police définie dans votre barre d'outils.

5
sirvan alie
  1. Emplacement des polices:

    • Tout d’abord, téléchargez un fichier .ttf. Mon fichier est Balker.ttf
    • assurez-vous que vous avez un dossier "assets". S'il n'y en a pas, cliquez avec le bouton droit sur l'application, puis sélectionnez Nouveau> Dossier> Dossier actifs.
    • Dans le dossier assets, créez un nouveau dossier et nommez-le 'police'
    • Placez votre fichier, comme je l'ai fait avec Balker.ttf, dans le dossier 'font'.
  2. Accédez au fichier Java de l'activité dont vous devez personnaliser la police. J'ai personnalisé mainActivity ici.

     for(int i = 0; i < toolbar.getChildCount(); i++)     
     { View view = toolbar.getChildAt(i);
    
        if(view instanceof TextView) {
            TextView textView = (TextView) view;
    
            Typeface myCustomFont=Typeface.createFromAsset(getAssets(),"font/Balker.ttf");
            textView.setTypeface(myCustomFont); }
    
    
     }
    
5
arushe

Vous pouvez utiliser cette méthode simple pour définir une police personnalisée sur le titre de la barre d’outils.

 Toolbar   toolbar = (Toolbar) findViewById(com.sports.unity.R.id.tool_bar);
        TextView tv = getToolBarTextView();
        tv.settext("Hello");

private TextView getToolBarTextView() {
        TextView titleTextView = null;

        try {
            Field f = mToolBar.getClass().getDeclaredField("mTitleTextView");
            f.setAccessible(true);
            titleTextView = (TextView) f.get(mToolBar);

     Typeface font = Typeface.createFromAsset(getApplicationContext().getAssets(),"fonts/mfont.ttf");
    titleTextView.setTypeface(font);

        } catch (NoSuchFieldException e) {
        } catch (IllegalAccessException e) {
        }
        return titleTextView;
    }
3
EminenT

Ça marche pour moi

typeFace= Typeface.createFromAsset(this.getAssets(), "fonts/myfont.ttf");
((TextView)toolbar.getChildAt(1)).setTypeface(typeFace);
2
mohammad golche

Si quelqu'un souhaite obtenir plusieurs titres de barre d'outils (un par défaut et un autre que vous définissez) pour xml:

  <Android.support.v7.widget.Toolbar
            Android:id="@+id/toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="?attr/actionBarSize"
            Android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay">

            <TextView
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:text="@string/app_name"
                Android:layout_gravity="left"
                Android:id="@+id/toolbar_title"
                Android:textSize="20sp"/>

        </Android.support.v7.widget.Toolbar>

alors fais ceci:

        getSupportActionBar().setTitle(null);//Set the default to null
        typeFace= Typeface.createFromAsset(getAssets(), "fonts/Raleway-Light.ttf");
        toolbarTitle = (TextView) toolbar.findViewById(R.id.toolbar_title);
        toolbarTitle.setTypeface(typeFace);
1
realpac

J'ai aussi cherché cette question, et ce fut l'une des premières réponses. J'ajouterai ma solution car celle donnée ici peut être considérée comme un peu obsolète (gardez à l'esprit que cela fonctionnerait quand même).

Étant donné qu'Android prend désormais en charge les polices personnalisées, il n'y a aucune raison d'attribuer des polices en Java, vous pouvez le faire en créant le fichier XML lui-même.

Tout d'abord, dans votre fichier de mise en page, ajoutez une barre d'outils personnalisée (vous pouvez définir la taille du texte ici même)

<Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar_top"
        Android:layout_height="wrap_content"
        Android:layout_width="match_parent"
        Android:minHeight="?attr/actionBarSize"
        Android:background="@color/primary">
        <TextView
            Android:id="@+id/toolbar_title"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:text="@string/signup"
            Android:textSize="22sp" />
    </Android.support.v7.widget.Toolbar>

Ensuite, accédez à l'onglet Conception de votre fichier XML et sélectionnez le texte dans la barre d'outils.

 Step 1

Sélectionnez l'option de fontFamily et sélectionnez la police que vous voulez sous les options données. Si ce n'est pas donné, vous pouvez rechercher plus de polices.

 Step 2

Recherchez la police souhaitée et sélectionnez-la. Votre police est modifiée.

 Step 3

Votre fichier XML va maintenant refléter la police que vous avez ajoutée, il y aura un attribut nommé Android:fontFamily

<Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar_top"
        Android:layout_height="wrap_content"
        Android:layout_width="match_parent"
        Android:minHeight="?attr/actionBarSize"
        Android:background="@color/primary">
        <TextView
            Android:id="@+id/toolbar_title"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:fontFamily="@font/roboto_slab"
            Android:text="@string/signup"
            Android:textColor="@color/secondaryBackground"
            Android:textSize="22sp" />
    </Android.support.v7.widget.Toolbar>

J'espère que cela a aidé.

1
anshajkhare

Inutile d'utiliser la vue texte externe si vous voulez seulement changer le nom de la police de la barre d'outils car Android.support.v7.appcompat 24.2Toolbar a la méthode setTitleTextAppearance et vous pouvez définir sa police comme ci-dessous.

créer un nouveau style dans styles.xml

<style name="CamptonBookTextAppearance">
     <item name="Android:fontFamily">@font/campton_book</item>
</style>

et l'utiliser

mToolbar.setTitleTextAppearance(this, R.style.CamptonBookTextAppearance);
0
Rahul

Il suffit d’ajouter du texte dans votre barre d’outils XML sans avoir besoin de la personnaliser: -

<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.Toolbar xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="@color/colorPrimary"
Android:gravity="center"
Android:minHeight="?attr/actionBarSize"
**app:titleTextAppearance="@font/montserrat_regular"**// apply your font
app:titleTextColor="@Android:color/white" />
0
Nikhil Jadhav

Si vous utilisez des polices Google (c'est-à-dire Open Sans), vous pouvez ajouter TextView en tant qu'enfant de votre barre d'outils, comme ceci

<Android.support.v7.widget.Toolbar
            Android:id="@+id/toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="?attr/actionBarSize"
            Android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay">

            <TextView
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:text="@string/app_name"
                Android:fontFamily="@font/open_sans"/>

</Android.support.v7.widget.Toolbar>

puis définissez simplement la propriété fontFamily pour votre TextView dans le menu Attributs (option Autres polices à la fin de la liste déroulante)

Android:fontFamily="@font/open_sans
0
kashlo

Merci @gmetax, c'est un bon point. Il est mauvais d’avoir accès à textview pour chaque activité. Nous devons écrire le code ci-dessous pour chaque activité:

TextView mTitle = (TextView) toolbarTop.findViewById(R.id.toolbar_title);

Nous avons déjà lié la barre d’outils et nous utilisons toolbar.setTitle (). Donc, j'étend la barre d'outils et substitue la méthode setTitle comme ceci:

@Override
public void setTitle(CharSequence title) {
    super.setTitle("");
    mTitle = (TextView) findViewById(R.id.toolbar_title);
    if (mTitle != null) {
        if (!TextUtils.isEmpty(title)) {
            mTitle.setText(title);
        }
    }
}

(Bien entendu, les polices personnalisées doivent être définies dans CustomTextView class.setTypeface) Nous pouvons maintenant utiliser ce qui suit:

toolbar.setTitle("bla bla");
0
farukcankaya

il suffit de télécharger la police que vous voulez afficher dans le titre et de la déplacer sous le dossier res-> fonts et de créer un fichier dessus

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:Android="http://schemas.Android.com/apk/res/Android">
<font
    Android:fontStyle="normal"
    Android:fontWeight="400"
    Android:font="@font/futura_book" />


<font
    Android:fontStyle="normal"
    Android:fontWeight="400"
    Android:font="@font/your font file name" />




</font-family>

ajoutez maintenant fontfamily = "le nom de votre famille de polices téléchargée, comme un fichier .ttf" dans votre fichier XML.

0
Mukesh Rawat

Je souhaitais toujours utiliser les méthodes de titre Toolbars, donc l'ajout de l'élément TextView personnalisé à l'intérieur de l'élément xml Toolbar ne fonctionnait pas pour moi. Au lieu de cela, j'ai utilisé la méthode suivante pour trouver le TextView:

public static void applyFontForToolbarTitle(Activity context){
    Toolbar toolbar = (Toolbar) context.findViewById(R.id.app_bar);
    for(int i = 0; i < toolbar.getChildCount(); i++){
        View view = toolbar.getChildAt(i);
        if(view instanceof TextView){
            TextView tv = (TextView) view;
            Typeface titleFont = Typeface.
               createFromAsset(context.getAssets(), "fonts/customFont");
            if(tv.getText().equals(context.getTitle())){
                tv.setTypeface(titleFont);
                break;
            }
        }
    }
}
0
afathman

1er créer 

  <Android.support.v7.widget.Toolbar
            Android:id="@+id/toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="?attr/actionBarSize"
            Android:background="?attr/colorPrimary"
            app:titleTextAppearance="@style/DancingWhite"
            app:popupTheme="@style/AppTheme.PopupOverlay"
            >


 <TextView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="Toolbar Title"
    Android:layout_gravity="center"
    Android:id="@+id/toolbar_title" />

</Android.support.v7.widget.Toolbar>

2ème 

votre activité, vous pouvez accéder au titre comme suit:

 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
 TextView mTitle = (TextView) 
 toolbar.findViewById(R.id.toolbar_title);

 Typeface font = Typeface.createFromAsset(getAssets(), "Mukta- Regular.ttf");

  mTitle.setTypeface(font);
0
Sudhir singh

Vous pouvez utiliser la police personnalisée de la barre d’outils par programme 

1) d’abord créer des polices de sous-répertoire dans un dossier d’actifs 

2) Ajoutez vos fichiers de polices dans le dossier des polices.

  toolbar.setTitle("Welcome");
        Typeface fromAsset  = Typeface.createFromAsset(getAssets(),"fonts/OpenSans-Light.ttf");
        ((TextView)toolbar.getChildAt(1)).setTypeface(fromAsset); 
0
Pritam