2016-11-22 3 views
1

Ich verwende die Calligraphy lib for Android, um die Schriftarten in meiner App zu ändern. Das Problem ist mit der Symbolleiste. Ich weiß nicht, wie ich die Schriftart ändern soll.Ändern Sie die Schriftart meiner Symbolleiste mit Kalligraphie

Dies ist meine Toolbar:

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

Dies ist TextAppearance in meinem style.xml:

<style name="Toolbar.TitleText" parent="TextAppearance.Widget.AppCompat.Toolbar.Title"> 
     <item name="fontPath">fonts/Raleway-ExtraBoldItalic.ttf</item> 
     <item name="android:textSize">50sp</item> 
    </style> 

Dies funktioniert nicht. Ich kann die Größe des Textes ändern (in diesem Beispiel funktioniert 50sp). Aber unmöglich, die Schriftart zu ändern.

+0

Initiieren Sie Kalligraphie in Application-Klasse? Überschreiben Sie 'attachBaseContext' in Ihrer Aktivität? –

+0

Ja, aber es funktioniert in allen meiner App, aber ich möchte eine andere Schriftart in meiner Symbolleiste. –

Antwort

1

Das Problem ist, dass Toolbar TextViews für Titel und Untertitel programmatisch in sich selbst erstellt. Es bedeutet, dass es nicht umwickelte LayoutInFlater von Kalligraphie verwendet. Stattdessen verwendet es System Schriftarten abhängig von fontFamily und fontStyle von textAppearance Attribut.

Aber Kalligraphie hört Änderungen von GlobalLayout und versucht, Stil aus Thema zu laden.

Also, was ich getan habe:

Add Aktivität Thema und anpassen ActionBarStyle:

<style name="ActivityTheme" parent="AppTheme.Base"> 
    <item name="android:actionBarStyle">@style/ActionBarStyle</item> 
</style> 

<style name="ActionBarStyle" parent="Widget.AppCompat.Light.ActionBar.Solid"> 
    <item name="android:titleTextStyle">@style/ToolbarTitleTextAppearance</item> 
</style> 

<style name="ToolbarTitleTextAppearance" parent="TextAppearance.AppCompat.Widget.ActionBar.Title"> 
    <item name="android:textSize">20sp</item> 
    <item name="fontPath">fonts/Roboto-Medium.ttf</item> 
</style> 
0

Es gibt zwei, wie Sie dies in der Art

1) Durch die Verwendung von Stil tun .xml Datei AnoDest sagte Ihnen

2) Durch die Verwendung von XML, in diesem w ay werden Sie mehr Kontrolle über die Ansicht erhalten, müssen Sie seprate XML-Datei namens appbar.xml und schließen es aus Ihrer Sicht

appbar.xml Datei

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.Toolbar 
    android:id="@+id/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="@drawable/gradient_theme" 
    android:elevation="@dimen/smallPadding" 
    android:fitsSystemWindows="true"> 

    <com.indussoft.lms.customUI.TextViewRobotoBold 
     android:id="@+id/tvTitle" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Activity Name" 
     android:textStyle="bold" 
     android:textSize="@dimen/okTextSize" 
     android:layout_gravity="center" 
     android:gravity="center" 
     android:visibility="visible" 
     android:textColor="@color/white" /> 

     <TextView 
     android:layout_width="wrap_content" 
     android:text="@string/accept" 
     fontPath="fonts/Roboto-Bold.ttf" 
     android:layout_height="wrap_content" /> 

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

und es in Ihrer Aktivität Ansicht erstellen, wie

<include 
     layout="@layout/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 
0

Nichts für mich gearbeitet, so ist dies die Funktion, die ich in meiner Grundaktivität schrieb das Problem zu umgehen:

private void setToolBarFont() { 
    final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    for (int i = 0; i < toolbar.getChildCount(); i++) { 
     final View child = toolbar.getChildAt(i); 
     if (child instanceof TextView) { 
      final TextView textView = (TextView) child; 
      CalligraphyUtils.applyFontToTextView(textView, TypefaceUtils.load(getAssets(), "fonts/my_font.ttf")); 
     } 
    } 
} 

p.s. Dies ist derzeit ein offenes Thema auf der GitHub-Seite von Calligraphy. Hier ist der Link zum Problem: https://github.com/chrisjenx/Calligraphy/issues/295

Verwandte Themen