it-swarm.com.de

Festlegen einer benutzerdefinierten Schriftart für den Titel in der Symbolleiste Android

Ich mache das:

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

Ich möchte hier im Titel "Hallo" eine eigene Schriftart für den Text festlegen. Wie geht das?

35
anupam x

Update 2018 (Kotlin-Version)

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
        }
    }
}

und benutze es so toolBar.changeToolbarFont()

alte Post

Um einen benutzerdefinierten Titel in Ihrer Toolbar zu verwenden, müssen Sie sich nur daran erinnern, dass die Toolbar nur eine ausgefallene ViewGroup ist. Sie können also einen benutzerdefinierten Titel hinzufügen:

<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>

Das bedeutet, dass Sie die TextView beliebig gestalten können, da sie nur eine normale TextView ist. So können Sie in Ihrer Aktivität auf den Titel wie folgt zugreifen:

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

Und dann: 

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

mTitle.setTypeface(khandBold);

UPDATE dynamische Version

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"));
}

und benutze es so

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

Ich wollte immer noch die Toolbars-Titelmethoden verwenden (ich wollte auch keine benutzerdefinierte Toolbar-Klasse haben). Das Hinzufügen des benutzerdefinierten TextView-Elements innerhalb des Toolbar-XML-Elements hat für mich nicht funktioniert. Stattdessen habe ich die folgende Methode verwendet, um das TextView zu finden:

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

Da Android.support.v7.appcompat 24.2Toolbar die Methode setTitleTextAppearance hat und Sie deren Schriftart ohne externe textview einstellen können.

erstellen Sie einen neuen Stil in styles.xml

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

und benutze es

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

Sie können dies nur mit Themen tun:

Ich habe einen Artikel geschrieben, der die vollständige Lösung beschreibt. Hier sind die Grundlagen:

1) Definieren Sie ein Thema in styles.xml:

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

2) Legen Sie dieses Thema in Ihrem Toolbars-Layout fest:

<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"/>

Dies setzt voraus, dass Sie eine .ttf-Datei in res/font gespeichert haben:

 Resourced directory with font

10
ahaisting

Sie können den Ordner fonts unter dem Verzeichnis res in der letzten Version von Android Studio 3 erstellen. Danach müssen Sie einen benutzerdefinierten Stil in styles definieren. Danach müssen Sie in der Symbolleiste titleTextAppearance verwenden Stil Sie sind definiert.

Schritte wie unten.

1. Erstellen Sie ein Schriftartenverzeichnis: res> Android-Ressourcenverzeichnis> Ressourcentyp: Schriftarten und klicken Sie auf Ok, um das Schriftartenverzeichnis zu erstellen ( Android Studio 3).

  1. Öffnen Sie styles.xml und erstellen Sie einen benutzerdefinierten Stil wie unten 

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

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

3. Öffnen Sie jetzt das Layout und fügen Sie app: titleTextAppearance = "@ style/TextAppearance.TabsFont" zum Toolbar-Tag hinzu (siehe unten).

<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" />

Das ist ERLEDIGT. Wenn Sie jetzt eine App ausführen, können Sie die Schriftart in Ihrer Symbolleiste anzeigen.

5
sirvan alie
  1. Platzierung von Schriftarten:

    • Laden Sie zunächst eine .ttf-Datei herunter. Meine Datei ist Balker.ttf
    • stellen Sie sicher, dass Sie einen Ordner "Assets" haben. Wenn keine vorhanden ist, klicken Sie mit der rechten Maustaste auf die App und wählen Sie Neu> Ordner> Assets-Ordner
    • Erstellen Sie im Assets-Ordner einen neuen Ordner und nennen Sie ihn "font".
    • Legen Sie Ihre Datei wie bei Balker.ttf im Ordner "font" ab.
  2. Wechseln Sie zur Java-Datei der Aktivität, deren Schriftart Sie anpassen müssen. Ich habe hier mainActivity angepasst.

     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

Sie können diese einfache Methode verwenden, um die Schriftart der Symbolleiste benutzerdefiniert festzulegen.

 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

Das funktioniert für mich

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

Wenn jemand Probleme damit hat, mehrere Symbolleistentitel (einen Standardwert und einen von Ihnen festgelegten) für xml zu erhalten:

  <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>

dann mach das:

        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

Ich habe auch nach dieser Frage gesucht, und dies war eine der ersten Antworten, die aufkam. Ich füge meine Lösung hinzu, da die hier gegebene als etwas veraltet angesehen werden kann (denk daran, dass es trotzdem funktionieren würde).

Da Android jetzt benutzerdefinierte Schriftarten unterstützt, gibt es keinen Grund, die Schriftarten in Java zuzuweisen. Dies ist auch möglich, wenn Sie die XML-Datei erstellen.

Fügen Sie zunächst in Ihrer Layoutdatei eine benutzerdefinierte Symbolleiste hinzu (Sie können die Textgröße hier selbst festlegen).

<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>

Wechseln Sie dann zur Registerkarte "Design" Ihrer XML-Datei und wählen Sie den Text in der Symbolleiste aus.

 Step 1

Wählen Sie die Option fontFamily und wählen Sie die gewünschte Schriftart unter den angegebenen Optionen. Ist dies nicht der Fall, können Sie nach weiteren Schriftarten suchen.

 Step 2

Suchen Sie nach der gewünschten Schriftart und wählen Sie sie aus. Ihre Schriftart wird geändert.

 Step 3

In Ihrer XML-Datei wird jetzt die von Ihnen hinzugefügte Schriftart angezeigt. Es gibt ein Attribut mit dem Namen 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>

Hoffe das hat geholfen.

1
anshajkhare

Laden Sie die benutzerdefinierte Schriftart herunter und speichern Sie sie im Ordner "font" im Ordner "res". Da die Symbolleiste eine Ansichtsgruppe ist, können Sie die Textansicht in der Symbolleiste platzieren und wie folgt verwenden

<Android.support.design.widget.AppBarLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    app:elevation="0dp">

    <Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="?attr/actionBarSize"
        >
        <TextView
            Android:id="@+id/toolbar_title"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:text="Toolbar"
            Android:gravity="center"
            Android:fontFamily="@font/roboto_regular" <--- custom font
            Android:textColor="@color/white"
            Android:textStyle="bold"
            Android:textAppearance="@style/Base.TextAppearance.Widget.AppCompat.Toolbar.Title"
            />

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


</Android.support.design.widget.AppBarLayout>

Diese Methode wird auch verwendet, um die Schriftart FETT zu machen.

0
Prakash Sharma

Die externe Textansicht muss nicht verwendet werden, wenn Sie nur die Schriftart des Symbolleistentitels ändern möchten, da Android.support.v7.appcompat 24.2Toolbar die Methode setTitleTextAppearance hat und Sie die Schriftart wie folgt einstellen können.

erstellen Sie einen neuen Stil in styles.xml

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

und benutze es

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

Zu diesem Zweck habe ich einen Bindeadapter erstellt.

public class FontBindingAdapter
{
    @BindingAdapter({"font"})
    public static void setFont(Toolbar toolbar, String font)
    {
        for (int i = 0; i < toolbar.getChildCount(); i++) {
            if (toolbar.getChildAt(i) instanceof AppCompatTextView) {
                UIUtil.setFont(font, (AppCompatTextView) toolbar.getChildAt(i));
            }
        }
    }
}

Dann benutze es wie folgt:

            <Android.support.v7.widget.Toolbar
                Android:id="@+id/toolbar"
                Android:layout_width="match_parent"
                Android:layout_height="?attr/actionBarSize"
                Android:background="@color/green"
                app:font="@{`LatoRegular`}"
                app:title="@string/setup_favorites"
                app:titleTextColor="@color/white"/>

0
nilsi

Fügen Sie einfach Textdarstellung in Ihrer Toolbar-XML hinzu, ohne dass Sie Anpassungen vornehmen müssen: -

<?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

Wenn Sie Google-Schriftarten verwenden (z. B. Open Sans), können Sie TextView als untergeordnetes Element Ihrer Toolbar hinzufügen

<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>

und legen Sie dann einfach die fontFamily -Eigenschaft für Ihre TextView im Menü "Attribute" fest (Option "Weitere Schriftarten" am Ende der Dropdown-Liste)

Android:fontFamily="@font/open_sans
0
kashlo

Danke @gmetax, das ist ein guter Punkt. Es ist schlecht, auf die Textansicht für jede Aktivität zuzugreifen. Wir müssen für jede Aktivität folgenden Code schreiben:

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

Wir haben die Symbolleiste bereits gebunden und toolbar.setTitle () verwendet. Also erweitere ich die Toolbar und überschreibe die setTitle-Methode wie folgt:

@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);
        }
    }
}

(Die benutzerdefinierte Schriftart sollte natürlich in CustomTextView class.setTypeface festgelegt werden.).

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

laden Sie einfach die Schriftart herunter, die Sie im Titel anzeigen möchten, verschieben Sie sie in den Ordner res-> font und erstellen Sie eine Datei über der Schriftfamilie

<?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>

fügen Sie jetzt fontfamily = "den Namen Ihrer heruntergeladenen Schriftfamilie wie a.ttf" in Ihre XML-Datei hinzu

0
Mukesh Rawat

Ich wollte immer noch die Toolbars-Titelmethoden verwenden, sodass das Hinzufügen des benutzerdefinierten TextView-Elements innerhalb des Toolbar-XML-Elements für mich nicht funktionierte. Stattdessen habe ich die folgende Methode verwendet, um das TextView zu finden:

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

1. erstellen 

  <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. 

ihre Aktivität können Sie wie folgt auf den Titel zugreifen:

 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

Sie können die benutzerdefinierte Schriftart der Symbolleiste programmgesteuert verwenden 

1) Erstellen Sie zuerst Unterverzeichnisschriften im Asset-Ordner 

2) Fügen Sie Ihre Schriftdateien im Schriftartenordner hinzu.

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