ผู้ที่หลงเข้ามาอ่านหลายๆคนก็คงจะตื่นเต้นกันไม่น้อยกับการมาของ Android O ที่ยังเป็น Developer Preview อยู่ ซึ่งการมาของ Developer Preview ก็จะช่วยให้นักพัฒนาได้เตรียมพร้อมก่อนที่ Android O จะปล่อยให้คนทั่วไปได้ใช้งานกัน และในระหว่างที่เจ้าของบล็อกนั่งอัปเดตเกี่ยวกับ Android O ก็ได้พบกับฟีเจอร์ใหม่ที่น่าสนใจที่ชื่อว่า Font Style
ในที่สุด Font Resource ก็มาแล้ววววววว
ปัญหาเดิมๆที่ผู้ที่หลงเข้ามาอ่านเคยเจอกันก็คืออยากจะ Custom Font ในแอปฯของตัวเอง แล้วต้องเขียนอะไรเยอะมาก เพราะไม่สามารถกำหนดเป็น XML Resource ได้โดยตรง แถมไฟล์ฟอนต์ก็ต้องเก็บไว้ใน Asset แล้วสั่งผ่านคำสั่ง Java ซึ่งเจ้าของบล็อกเคยเขียนเรื่องนี้ไว้ใน [Android Design] สิ่งที่ควรจะรู้เมื่อต้องตะลุยไปกับงานแอนดรอยด์ที่เกี่ยวกับ Font สุดหรรษาล่าสุดได้มีการเพิ่ม Font Resource เข้ามาให้ใน Android O แล้ว ซึ่งผู้ที่หลงเข้ามาอ่านสามารถ Custom Font ได้ง่ายขึ้นเสียที (น้ำตาจะไหล)
โดยผู้ที่หลงเข้ามาอ่านสามารถสร้าง Font Resource ใน res ได้ทันที โดยใช้ชื่อว่า font แล้วโยนฟอนต์ไว้ในนี้ได้เลยไม่ว่าจะเป็น .ttf หรือ .otf
สามารถกดเปิดไฟล์เพื่อทดลองพิมพ์ได้ด้วยนะเออ
เวลาเรียกใช้งานก็กำหนดด้วย Attribute ที่ชื่อว่า android:fontFamily ได้เลย
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/th_sarabun_new"
android:text="Hello World!" />
หรืออยากจะทำเป็น Style ก็ได้เช่นกัน
<style name="CustomTextStyle" parent="TextAppearance.AppCompat">
<item name="android:fontFamily">@font/th_sarabun_new</item>
</style>
โคตรง่ายยยยยยยย
และเมื่อมี Font Resource นั่นก็หมายความว่าผู้ที่หลงเข้ามาอ่านสามารถทำ Custom View ที่มี Custom Attribute รองรับ Custom Font ได้ด้วยนะเออ
Typeface titleTypeface;
Typeface detailTypeface;
...
TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.CustomInfoCard);
titleTypeface = typedArray.getFont(R.styleable.CustomInfoCard_titleFontStyle);
detailTypeface = typedArray.getFont(R.styleable.CustomInfoCard_detailFontStyle);
typedArray.recycle();
เย้ เย
ทำชีวิตให้ง่ายขึ้นด้วย Font Family
นอกจากนี้ยังมี Font Family ให้ใช้งานด้วย เพื่อรองรับการแสดง Font Style ในแบบต่างๆ โดยสร้างไฟล์ Font Style เป็น XML ไว้ใน Font Resource ได้เลยโดยจะใช้ <font-style> ... </font-style>
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android">
<font
android:font="@font/th_sarabun_new_normal"
android:fontStyle="normal" />
<font
android:font="@font/th_sarabun_new_italic"
android:fontStyle="italic" />
</font-family>
จากที่ลองพบว่ายังไม่มีผลอะไรใดๆกับฟอนต์ ถึงแม้ว่าจะกำหนด Text Style หรือ Font Style แล้วก็ตาม ซึ่งไม่แน่ใจว่าเพราะเป็น Preview Developer หรือป่าว และก็ยังไม่มีข้อมูลอธิบายอะไรตรงนี้มากนัก ไว้จะมาอัปเดตแก้ไขตรงนี้ในภายหลังนะครับ
เรียกใช้ Font Resource ผ่านโค้ด Java
สามารถเรียก Font Resource ได้เหมือนกับ Resource ตัวอื่นๆผ่านโค้ด Java ดังนี้Typeface typeface = getResources().getFont(R.font.th_sarabun_new_bold);
textView.setTypeface(typeface);
เพิ่ม FontManager เพื่อเข้าถึง Font อื่นๆที่มีอยู่ใน System
บน API 26 จะมีคำสั่ง FontManger ที่จะช่วยจัดการเกี่ยวกับ Font หลักๆในตอนนี้ก็คือสามารถดึง Font ที่มีอยู่ในเครื่องได้ด้วยคำสั่งFontManager fontManager = getSystemService(FontManager.class);
FontConfig systemFontConfig = fontManager.getSystemFonts();
ซึ่ง FontConfig ที่ได้จะเป็นข้อมูลของ Font ทุกตัวที่อยู่ใน System Font เพื่อเอาไปใช้งานอีกทีนั่นเอง ซึ่งตอนนี้ยังไม่มีข้อมูลเกี่ยวกับการเรียกใช้งานนัก
แต่ถ้าให้เดาก็คือนักพัฒนาสามารถเรียก Font ในเครื่องมาใช้งานได้ด้วย Font Provider ซึ่งเพิ่มเข้ามาใหม่ใน API 26 เช่นกัน
เพราะแอบไปสังเกตเห็นว่า TypeFace มีการเพิ่มคำสั่งแบบ Asynchronous เข้ามาด้วย (เดิมที Typeface จะดึง Font มาใช้งานแบบ Synchronous เพียงอย่างเดียว) ที่สามารถกำหนดได้ว่าจะดึง Font อะไร แล้ว Font Provider จะส่งกลับมาให้ทาง Callback
FontRequest fontRequest = new FontRequest(providerAuthority, query);
Typeface.create(fontRequest, new Typeface.FontRequestCallback() {
@Override
public void onTypefaceRetrieved(Typeface typeface) {
}
@Override
public void onTypefaceRequestFailed(int i) {
}
});
ซึ่งตรงนี้ก็ยังไม่มีข้อมูลเช่นกันจ้า ในตอนนี้ยังมีแค่ API Reference ให้ดูเท่านั้น
สรุป
ในที่สุดแอนดรอยด์ก็มี Font Resource ให้ใช้งานได้ง่ายๆเสียที (น้ำตาจะไหล) ซึ่งอาจจะดูไม่แตกต่างอะไรกับของเดิมมากนัก แต่ Font Resource นั้นจะช่วยให้ผู้ที่หลงเข้ามาอ่านสามารถประยุกต์ใช้งานได้หลากหลายมากขึ้น เช่น แสดงผลของ Font บน View ต่างๆ โดยที่ไม่ต้องไปจัดการอะไรมากนัก และการทำ Custom View ที่เวลานำไปใช้งานจะสามารถกำหนด Font ได้ง่ายขึ้น รวมไปถึง FontProvider ที่เพิ่มเข้าใหม่ที่น่าจะมีแนวโน้มว่าต่อไป Font ในเครื่องแอนดรอยด์สามารถรองรับกับการทำงานของแอปฯได้หลากหลายขึ้นแต่ที่น่าเศร้าก็คือเรื่องของ Backward Compatibility นี่แหละ เพราะว่าในตอนนี้ Font Resource ไม่รองรับกับเวอร์ชันที่ต่ำกว่า API 26 ก็ต้องรอลุ้นกันอีกทีว่าจะมีให้ใช้งานใน Android Support Library กันในอนาคตหรือไม่ และก็ต้องรอดูต่อไปว่าจะมีอัปเดตอะไรอีกบ้าง เพราะในตอนนี้ยังเป็นแค่ Developer Preview 1 เท่านั้นเองนะ