สร้างโปรเจ็ค Android ให้รับรอง Material Design
บทความนี้เป็นการทดลองเล่นๆของผมเองครับ เนื่องจากว่าตั้งแต่ Android ออก Material Design มาตั้งแต่ปีที่แล้ว ส่วนตัวยังไม่ได้เขียนหรือพัฒนาแอพอะไรให้มันลองรับหรือได้ใช้งานเลยซักอย่าง ตั้งแต่เขียน Android L Developer Preview : ทดลองเล่น RecyclerView ก็ไม่ได้แตะอีกเลย เครื่องจริงรองรับ Lollipop ก็ไม่มี Emulator ขี้เกียจเปิด :) วันนี้ว่างๆ ก็เลยนั่งลองสร้างโปรเจ็คแบบ Material ดูว่ามันยากหรือไม่ และสามารถรอบรับกับเวอร์ชันก่อน Lollipop ได้หรือไม่ ปรากฎว่าไม่มีปัญหา เพียงแค่บาง feature อาจจะไม่รองรับเท่านั้นเอง
Step 1 : Create Project
ขั้นตอนการสร้างโปรเจ็คแบบ Material ขั้นแรกเลยก็สร้างโปรเจ็คขึ้นมาก่อน เลือก API 21 ไปเลย เพื่อจะให้รองรับ Material
จริงๆตอนหลังผมจะปรับลดเหลือ minSDK14 เพื่อให้รองรับเวอร์ชันต่ำด้วย แต่ตอนนี้เลือกไป่ก่อนครับ :)
Step 2 : Add Dependency
ทำการเพิ่ม dependencies appcompat
ลงไป โดยการเปิดไฟล์ build.gradle
ของโมดูล app
จากนั้นทำการกด Sync Project with gradle file หรือ Sync now
Step 3 : Material Theme
จะเห็นว่าที่โฟลเดอร์ resource res
จะมีโฟลเดอร์ values
2 ตัวคือ
values
: สำหรับ SDK ที่เวอร์ชันต่ำกว่า 21values-v21
: สำหรับ SDK เวอร์ชัน 21 (Lollipop)
ทำการเปิดไฟล์ values-v21/styles.xml
จะเห็นโครงสร้างไฟล์ดังนี้
สังเกตที่ parent เราสามารถเลือกได้หลายแบบ เช่น
android:Theme.Material
: สำหรับเวอร์ชัน Darkandroid:Theme.Material.Light
: สำหรับเวอร์ชัน Lightandroid:Theme.Material.Light.DarkActionBar
: เวอร์ชัน Light แต่ actionbar เป็น Dark เป็นต้น
รูปภาพแสดง Theme Dark และ Light ของ Material
Step 4 : Custom Theme/Color
ต่อมามารู้จักกับส่วนต่างๆของ Status Bar กันครับ โดยดูจากรูปด้านล่างได้เลย มีอธิบายว่า แต่ละส่วนเรียกว่าอะไร และเราสามารถที่จะปรับเปลี่ยนสีได้ตามชื่อเรียกเลย
จากรูปด้านบน เราจะเห็นส่วนประกอบต่างๆ โดยเราสามารถที่จะ custom ได้ตามที่เราต้องการ เช่น เปิดไฟล์เดิม values-v21/styles.xml
และผมทำการสร้างไฟล์ values/colors.xml
ดังนี้
Step 5 : รองรับเวอร์ชันตำกว่า Lollipop
ให้ทำการสร้างไฟล์ styles.xml
ไว้ในโฟลเดอร์ res/values
โดยมีรูปแบบเหมือนกับ Material Theme ในไฟล์ res/values-v21/styles.xml
สิ่งที่ต่างกันคือ ไม่มี prefix
android:
ซึ่งใช้เฉพาะ Theme Material
จากนั้นเปลี่ยนเลขเวอร์ชัน min SDK เป็น 14 ใน build.gradle
หากว่าเราใช้ Material Theme แต่ว่าไม่ได้เตรียมพวกไฟล์
values
ไว้ให้สำหรับเวอร์ชันที่่ตำกว่า ตัวแอพจะไม่สามารถรันได้ จะรันได้เฉพาะ Lollipop เท่านั้น
Step 6 : Animations
สำหรับ Android 5.0 มี APIs ตัวใหม่สำหรับทำ custom animation ด้วย อย่างเช่น activity transitions เป็นอนิเมชันขณะที่เราเปิด/เปลี่ยน activity อย่างเช่น
แต่ถ้าหากเราทำเพื่อรองรับเวอร์ชันเก่าๆด้วย ก็ต้องทำการเช็คเวอร์ชันก่อน เพราะมันใช้ได้เฉพาะ 5.0 ถ้าเป็นเวอร์ชันต่ำ ก็ให้ startActivity()
แบบปกติไม่ต้องมี transition อะไร
สรุป
ช่วงที่ผมทดสอบ เวลารันบน Android 5.0 โดยใช้ Material Theme ตัว Activity มันใช้ extends Activity
แต่เวลาที่ผมลองเปลี่ยน Material Theme ในไฟล์ values/styles.xml
ไปใช้ Theme.Appcomt
ปรากฎว่า actionbar ไม่แสดง ต้องใช้ extends ActionBarActivity
สรุปไม่รู้ถูกหรือผิด :) ว่า
- ใช้
Theme.Material
ร่วมกับActivity
ธรรมดา - ใช้
Theme.AppCompat
ร่วมกับActionBarActivity
ใช้Theme.Mateiral
ร่วมกับActionBarActivity
ไม่ได้- ใช้
Theme.AppCompat
ในvalues-v21
และใช้ActionBarActivity
ก็รัน Material ได้
สุดท้ายลองไปเล่นกันดูครับ ส่วนตัวผมก็ได้ลองเล่นแบบพื้นฐานๆ หากใครมีอะไรเจ๋งๆ มาแชร์กันได้นะครับ :)
Reference
- Authors
-
Chai Phonbopit
เป็น Web Dev ในบริษัทแห่งหนึ่ง ทำงานมา 10 ปีกว่าๆ ด้วยภาษาและเทคโนโลยี เช่น JavaScript, Node.js, React, Vue และปัจจุบันกำลังสนใจในเรื่องของ Blockchain และ Crypto กำลังหัดเรียนภาษา Rust