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?
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);
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;
}
}
}
}
Da Android.support.v7.appcompat 24.2
Toolbar
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);
Ich habe einen Artikel geschrieben, der die vollständige Lösung beschreibt. Hier sind die Grundlagen:
styles.xml
:<style name="ToolbarTheme" parent="ThemeOverlay.AppCompat.Light">
<item name="Android:fontFamily">@font/fancy-font</item>
</style>
Toolbar
s-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"/>
.ttf
-Datei in res/font
gespeichert haben: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).
<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.
Platzierung von Schriftarten:
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); }
}
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;
}
Das funktioniert für mich
typeFace= Typeface.createFromAsset(this.getAssets(), "fonts/myfont.ttf");
((TextView)toolbar.getChildAt(1)).setTypeface(typeFace);
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);
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.
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.
Suchen Sie nach der gewünschten Schriftart und wählen Sie sie aus. Ihre Schriftart wird geändert.
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.
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.
Die externe Textansicht muss nicht verwendet werden, wenn Sie nur die Schriftart des Symbolleistentitels ändern möchten, da Android.support.v7.appcompat 24.2
Toolbar
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);
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"/>
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" />
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
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");
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
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;
}
}
}
}
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);
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);