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?
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);
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;
}
}
}
}
Depuis Android.support.v7.appcompat 24.2
Toolbar
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);
J'ai écrit un article décrivant la solution complète. Voici les bases:
styles.xml
:<style name="ToolbarTheme" parent="ThemeOverlay.AppCompat.Light">
<item name="Android:fontFamily">@font/fancy-font</item>
</style>
Toolbar
s:<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"/>
.ttf
stocké dans res/font
: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).
<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.
Emplacement des polices:
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); }
}
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;
}
Ça marche pour moi
typeFace= Typeface.createFromAsset(this.getAssets(), "fonts/myfont.ttf");
((TextView)toolbar.getChildAt(1)).setTypeface(typeFace);
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);
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.
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.
Recherchez la police souhaitée et sélectionnez-la. Votre police est modifiée.
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é.
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.2
Toolbar
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);
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" />
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
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");
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.
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;
}
}
}
}
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);
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);