Thật không may, Android không cung cấp cách nhanh chóng, dễ dàng và sạch sẽ bạn đang tìm kiếm để thay đổi phông chữ cho toàn bộ ứng dụng của bạn. Nhưng gần đây tôi đã xem xét vấn đề này và tạo ra một số công cụ cho phép bạn thay đổi phông chữ mà không cần bất kỳ mã hóa nào (bạn có thể thực hiện tất cả thông qua xml, kiểu và thậm chí cả văn bản xuất hiện). Chúng dựa trên các giải pháp tương tự như bạn thấy trong các câu trả lời khác ở đây, nhưng cho phép linh hoạt hơn nhiều. Bạn có thể đọc tất cả về nó trên this blog và xem dự án github here.
Dưới đây là ví dụ về cách áp dụng các công cụ này. Đặt tất cả các tệp phông chữ của bạn trong assets/fonts/
. Sau đó, hãy khai báo các phông chữ đó trong tệp xml (ví dụ: res/xml/fonts.xml
) và tải tệp này sớm trong ứng dụng của bạn với TypefaceManager.initialize(this, R.xml.fonts);
(ví dụ: trong onCreate của lớp Ứng dụng của bạn). Các tập tin xml trông như thế này:
<?xml version="1.0" encoding="utf-8"?>
<familyset>
<!-- Some Font. Can be referenced with 'someFont' or 'aspergit' -->
<family>
<nameset>
<name>aspergit</name>
<name>someFont</name>
</nameset>
<fileset>
<file>Aspergit.ttf</file>
<file>Aspergit Bold.ttf</file>
<file>Aspergit Italic.ttf</file>
<file>Aspergit Bold Italic.ttf</file>
</fileset>
</family>
<!-- Another Font. Can be referenced with 'anotherFont' or 'bodoni' -->
<family>
<nameset>
<name>bodoni</name>
<name>anotherFont</name>
</nameset>
<fileset>
<file>BodoniFLF-Roman.ttf</file>
<file>BodoniFLF-Bold.ttf</file>
</fileset>
</family>
</familyset>
Bây giờ bạn có thể sử dụng các phông chữ theo phong cách hay xml (với điều kiện bạn sử dụng các công cụ tôi đã đề cập ở trên) của bạn, bằng cách thiết lập thuộc tính flFont trong TextView tùy chỉnh com.innovattic.font.FontTextView
trong cách bố trí xml của bạn . Dưới đây bạn có thể thấy cách bạn có thể áp dụng một phông chữ cho tất cả các văn bản trong toàn bộ ứng dụng của bạn, chỉ cần bằng cách chỉnh sửa res/values/styles.xml
:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
<!-- Application theme -->
<!-- Use a different parent if you don't want Holo Light -->
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<item name="android:textViewStyle">@style/MyTextViewStyle</item>
</style>
<!-- Style to use for ALL text views (including FontTextView) -->
<!-- Use a different parent if you don't want Holo Light -->
<style name="MyTextViewStyle" parent="@android:style/Widget.Holo.Light.TextView">
<item name="android:textAppearance">@style/MyTextAppearance</item>
</style>
<!-- Text appearance to use for ALL text views (including FontTextView) -->
<!-- Use a different parent if you don't want Holo Light -->
<style name="MyTextAppearance" parent="@android:style/TextAppearance.Holo">
<!-- Alternatively, reference this font with the name "aspergit" -->
<!-- Note that only our own TextView's will use the font attribute -->
<item name="flFont">someFont</item>
<item name="android:textStyle">bold|italic</item>
</style>
<!-- Alternative style, maybe for some other widget -->
<style name="StylishFont">
<item name="flFont">anotherFont</item>
<item name="android:textStyle">normal</item>
</style>
</resources>
Với sự kèm res/layout/layout.xml
:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<!-- This text view is styled with the app theme -->
<com.innovattic.font.FontTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="This uses my font in bold italic style" />
<!-- This text view is styled here and overrides the app theme -->
<com.innovattic.font.FontTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:flFont="anotherFont"
android:textStyle="normal"
android:text="This uses another font in normal style" />
<!-- This text view is styled with a style and overrides the app theme -->
<com.innovattic.font.FontTextView
style="@style/StylishFont"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="This also uses another font in normal style" />
</LinearLayout>
Đừng quên để áp dụng các chủ đề trong tệp kê khai Android của bạn.
Nguồn
2014-03-03 13:02:35
có, nhưng không phải những gì anh ấy yêu cầu – user1010160