2017-10-29 25 views
10

Trong hoạt động của tôi, tôi có một thanh công cụ tùy chỉnh. Tôi đang cố thay đổi phông chữ tiêu đề của nó.Sự cố khi sử dụng phông chữ tùy chỉnh cho Thanh công cụ

Trước đây, tôi có thể thực hiện điều đó bằng cách đặt phông chữ vào thư mục nội dung. Với Android Studio 3, giờ đây chúng tôi có thể sử dụng fontFamily và FontsContract. tôi đã cố gắng tiếp cận này thông qua các mã bên dưới:

mToolbar.setTitleTextAppearance(context,R.style.AppTheme_ActionBarText); 

và phong cách

<style name="AppTheme.ActionBarText" parent="@android:style/Widget.ActionBar.TabText"> 
      <item name="fontFamily">@font/ultra</item> 
     </style> 

Khi tôi chạy ứng dụng, sau một vài giây (thời gian cần để tải về phông chữ tùy chỉnh), các treo ứng dụng với các bản ghi dưới đây:

java.lang.NullPointerException: cố gắng để đọc từ trường 'int android.support.v4.provider.FontsContractCompat $ TypefaceResult.mResult' 01.trên tham chiếu đối tượng rỗng tại android.support.v4.provider.FontsContractCompat $ 2.onReply (FontsContractCompat.java:277) tại android.support.v4.provider.FontsContractCompat $ 2.onReply (FontsContractCompat.java:274) at android.support.v4.provider.FontsContractCompat $ 3.onReply (FontsContractCompat.java:312) tại android.support.v4.provider.FontsContractCompat $ 3.onReply (FontsContractCompat.java:300) tại android.support.v4.provider. SelfDestructiveThread $ 2 $ 1.run (SelfDestructiveThread.java:149) tại android.os.Handler.handleCallback (Handler.java:739) tại android.os.Handler.dispatchMessage (Handler.java:95) tại android.os. Looper.loop (Looper.java:158) tại android.app.ActivityThread.main (ActivityThread.java:7225) tại java.lang.reflect.Method.invoke (Phương thức gốc) tại com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java: 1230) tại com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1120)

đây có phải là một lỗi hoặc là có một cách chính xác để tải font qua xml? Tôi biết một cách khác là tải phông chữ theo chương trình và sử dụng trình nghe để đặt kiểu chữ trên văn bản.

** CHỈNH SỬA: trên lần chạy ứng dụng thứ hai, không xảy ra sự cố (vì phông chữ đã được tải xuống). Đối với mục đích thử nghiệm, tôi thay đổi phông chữ sau mỗi vụ tai nạn để gỡ lỗi ...

+0

Có bất kỳ bản cập nhật về vấn đề này. Tôi gặp vấn đề tương tự. – engincancan

+0

Im phải đối mặt với cùng một vấn đề, @engincancan bạn đã quản lý để giải quyết nó? – busted13

+0

bộ nhớ cache không hợp lệ và khởi động lại android studio.Đối với tôi nó đã hoạt động. android studio -> File -> Cache/Restback không hợp lệ – Jovin

Trả lời

5

Issue xảy ra khi người dùng cố gắng để bắt đầu ứng dụng với phông chữ tải khi không có internet trên thiết bị và phông chữ này không được tải về trước. Sau đó, ứng dụng sẽ bắt đầu, nhưng sự cố sẽ chỉ xảy ra sau ~ 5-10 sech. Tôi nghĩ khi thời gian chờ http xảy ra.

Vì vậy, tôi không có giải pháp, do đó sử dụng xml-phông chữ thay vì các phông chữ có thể tải về, xem https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html

FYI: tất cả các phông chữ tải nạp vào /data/data/com.google.android.gms/files/phông chữ thư mục trên thiết bị của bạn, Nếu bạn đã root thiết bị, sau đó nó dễ dàng để xóa và tái sản xuất vấn đề này nhiều hơn một lần.

+0

Đây là những gì tôi đã làm từ lâu rồi, và có vẻ như vẫn không có cách nào để làm điều đó theo chương trình, vì vậy tôi sẽ đánh dấu nó là giải quyết trong trường hợp những người khác muốn đề cập đến nó. Cảm ơn. – RJFares

1

Theo docs bạn nên sử dụng app namespace khi sử dụng Thư viện Hỗ trợ 26:

Khi bạn khai báo họ phông chữ trong layout XML thông qua thư viện hỗ trợ, sử dụng không gian tên ứng dụng.

Vì vậy, trong mã của bạn:

<item name="app:fontFamily">@font/ultra</item> 
+0

Trong styles.xml bạn không thể thực sự sử dụng không gian tên ứng dụng, do đó, để chỉnh sửa ở trên của bạn, chỉ cần dải "app:". Nhưng vẫn còn, vấn đề vẫn chưa được giải quyết:/Đó là một cái gì đó khác, tôi đã chỉnh sửa câu hỏi của tôi – RJFares

4

Chỉnh sửa: Có vẻ như vấn đề đã được khắc phục kể từ phiên bản 27.1.0 của thư viện hỗ trợ.

Điều này có vẻ là sự cố thư viện hỗ trợ. Các nhà phát triển của Google đã chỉ ra rằng bản sửa lỗi sẽ có sẵn sau phiên bản 27.0.2, hiện chưa được phát hành.

https://issuetracker.google.com/issues/69085400

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