2015-07-02 16 views
14

Tôi đang sử dụng Calligraphy Thư viện để sử dụng phông chữ tùy chỉnh trong ứng dụng của tôi. Tôi đặt phông chữ tùy chỉnh cho toàn bộ ứng dụng của mình theo phông chữ mặc định bằng cách sử dụng CalligraphyConfig, trong lớp Application của tôi theo phương pháp #onCreate() và nó hoạt động tốt. Sự cố xảy ra khi tôi cần thay đổi phông chữ của một hoạt động (SettingsActivity).Phông chữ khác nhau cho một số hoạt động sử dụng Thư viện Thư pháp

Tôi đã thử sử dụng phông chữ tùy chỉnh trong style tuy nhiên Nó không thay đổi phông chữ hoạt động.

Sau đây là đoạn code của phong cách

<style name="EnglishActivitiesTheme" parent="AppTheme"> 
     <item name="android:textViewStyle">@style/AppTheme.Widget.TextView</item> 
    </style> 

    <style name="AppTheme.Widget.TextView" parent="android:Widget.Holo.Light.TextView"> 
     <item name="fontPath">fonts/Roboto-Regular.ttf</item> 
    </style> 

Trong Manifest

<activity 
     android:name=".SettingsActivity" 
     android:theme="@style/EnglishActivitiesTheme" 
     android:parentActivityName=".MainActivity" > 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value=".MainActivity" /> 
    </activity> 

Tôi có làm điều gì sai với phông chữ tùy chỉnh mặc dù phương pháp phong cách? hoặc Có phương pháp tốt hơn để làm điều này?

+0

bạn đã thêm attachBaseContext vào hoạt động của mình chưa? – EagleEye

+0

@EagleEye Có, tôi đã làm điều này. Như tôi đã nói, phông chữ tùy chỉnh mặc định đang hoạt động tốt. –

+0

Bạn tiếp cận với phong cách có vẻ là tốt ... Nhưng tôi đọc trong readme của lib có thể một cái gì đó thú vị: 'Mặc định - nếu được định nghĩa trong CalligraphyConfig này được sử dụng không ai trong số trên được tìm thấy HOẶC nếu một trong những lợi nhuận trên một phông chữ không hợp lệ.' Bạn có một số phông chữ không hợp lệ? Nó có thể là một vấn đề như thế này (tôi hy vọng nó là bởi vì, nếu không, nó sẽ phức tạp hơn để sửa chữa) –

Trả lời

5

Có vẻ như đó là do AppCompat tạo phiên bản khác nhau của các nút/bản xem trước văn bản khi chạy.

Trong khởi động Thư pháp của bạn trong ứng dụng của bạn, hãy thêm dòng:

.addCustomStyle(AppCompatTextView.class, android.R.attr.textViewStyle) 

để kết thúc với một cái gì đó như:

@Override 
public void onCreate() { 
    super.onCreate(); 
    CalligraphyConfig.initDefault(new CalligraphyConfig.Builder() 
          .setDefaultFontPath("fonts/some-other-custom-font.ttf") 
          .addCustomStyle(AppCompatTextView.class, android.R.attr.textViewStyle) 
          .setFontAttrId(R.attr.fontPath) 
          .build() 
      ); 
    //.... 
} 

Và đó nên chăm sóc TextView của bạn.

Edit:

này bây giờ sẽ được cố định với https://github.com/chrisjenx/Calligraphy/pull/191, hiện đang là một bản chụp.

+0

Waooo That Worked. –

2

Giải pháp tốt nhất tuy nhiên tốt hơn phông chữ tùy chỉnh trong hoạt động đó.

Tôi chỉ lấy

@Override 
protected void attachBaseContext(Context newBase) { 
    super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); 
} 

từ hoạt động nơi tôi đã cố gắng để thay đổi font. Trong hoạt động đó sử dụng phông chữ android mặc định tốt hơn phông chữ tùy chỉnh đó cho các hoạt động khác của tôi.

Các vấn đề liên quan