รูปแบบและธีมใน Android ช่วยให้คุณแยกรายละเอียดของการออกแบบแอปออกจากโครงสร้างและลักษณะการทำงานของ UI ได้ ซึ่งคล้ายกับสไตล์ชีตในการออกแบบเว็บ
รูปแบบ คือชุดแอตทริบิวต์ที่ระบุลักษณะที่ปรากฏของ View รายการเดียว รูปแบบสามารถระบุแอตทริบิวต์ต่างๆ เช่น สีแบบอักษร ขนาดแบบอักษร สีพื้นหลัง และอื่นๆ อีกมากมาย
ธีม คือชุดแอตทริบิวต์ที่ใช้กับทั้งแอป กิจกรรม หรือลำดับชั้นของมุมมอง ไม่ใช่แค่มุมมองเดียว เมื่อคุณใช้ธีม มุมมองทุกรายการในแอปหรือกิจกรรมจะใช้แอตทริบิวต์แต่ละรายการของธีมที่รองรับ นอกจากนี้ ธีมยังใช้รูปแบบกับองค์ประกอบที่ไม่ใช่มุมมองได้ด้วย เช่น แถบสถานะและพื้นหลังของหน้าต่าง
รูปแบบและธีมจะประกาศไว้ใน
ไฟล์ทรัพยากรรูปแบบใน
res/values/ซึ่งมักจะมีชื่อว่าstyles.xml
รูปที่ 1 ธีม 2 ธีมที่ใช้กับกิจกรรมเดียวกัน:
Theme.AppCompat (ซ้าย) และ Theme.AppCompat.Light (ขวา)
ธีมกับรูปแบบ
ธีมและรูปแบบมีความคล้ายคลึงกันหลายอย่าง แต่ใช้เพื่อวัตถุประสงค์ที่แตกต่างกัน ธีมและรูปแบบมีโครงสร้างพื้นฐานเหมือนกัน นั่นคือคู่คีย์-ค่าที่แมป แอตทริบิวต์ กับ ทรัพยากร
รูปแบบ จะระบุแอตทริบิวต์สำหรับมุมมองประเภทหนึ่งๆ เช่น รูปแบบหนึ่งอาจระบุแอตทริบิวต์ของปุ่ม แอตทริบิวต์ทุกรายการที่คุณระบุในรูปแบบจะเป็นแอตทริบิวต์ที่คุณตั้งค่าในไฟล์เลย์เอาต์ได้ การแยกแอตทริบิวต์ทั้งหมดไปยังรูปแบบจะช่วยให้ใช้งานและดูแลรักษาแอตทริบิวต์เหล่านั้นในวิดเจ็ตหลายรายการได้ง่าย
ธีม จะกำหนดชุดทรัพยากรที่มีชื่อซึ่งรูปแบบ เลย์เอาต์ วิดเจ็ต และอื่นๆ สามารถอ้างอิงได้ ธีมจะกำหนดชื่อเชิงความหมาย เช่น colorPrimary ให้กับทรัพยากร Android
รูปแบบและธีมออกแบบมาให้ทำงานร่วมกัน เช่น คุณอาจมีรูปแบบที่ระบุว่าส่วนหนึ่งของปุ่มเป็น colorPrimary และอีกส่วนหนึ่งเป็น colorSecondary โดยธีมจะกำหนดสีจริงของสีเหล่านั้น เมื่ออุปกรณ์เข้าสู่โหมดกลางคืน แอปจะเปลี่ยนจากธีม "สว่าง" เป็นธีม "มืด" ซึ่งจะเปลี่ยนค่าของชื่อทรัพยากรทั้งหมด คุณไม่จำเป็นต้องเปลี่ยนรูปแบบ เนื่องจากรูปแบบใช้ชื่อเชิงความหมาย ไม่ใช่คำจำกัดความสีที่เฉพาะเจาะจง
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่ธีมและรูปแบบทำงานร่วมกันได้ที่บล็อกโพสต์เรื่อง การจัดรูปแบบ Android: ธีมกับรูปแบบ
สร้างและใช้รูปแบบ
หากต้องการสร้างรูปแบบใหม่ ให้เปิดไฟล์ res/values/styles.xml ของโปรเจ็กต์ จากนั้นทำตามขั้นตอนต่อไปนี้สำหรับแต่ละรูปแบบที่ต้องการสร้าง
- เพิ่มองค์ประกอบ
<style>ที่มีชื่อซึ่งระบุรูปแบบได้แบบไม่ซ้ำ - เพิ่มองค์ประกอบ
<item>สำหรับแอตทริบิวต์รูปแบบแต่ละรายการที่ต้องการกำหนดnameในแต่ละรายการจะระบุแอตทริบิวต์ที่คุณใช้เป็นแอตทริบิวต์ XML ในเลย์เอาต์ ค่าในองค์ประกอบ<item>คือค่าของแอตทริบิวต์นั้น
ตัวอย่างเช่น สมมติว่าคุณกำหนดรูปแบบต่อไปนี้
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="GreenText" parent="TextAppearance.AppCompat"> <item name="android:textColor">#00FF00</item> </style> </resources>
คุณสามารถใช้รูปแบบกับมุมมองได้ดังนี้
<TextView style="@style/GreenText" ... />
ระบบจะใช้แอตทริบิวต์แต่ละรายการที่ระบุในรูปแบบกับมุมมองนั้น หากมุมมองยอมรับ โดยมุมมองจะละเว้นแอตทริบิวต์ที่ไม่ยอมรับ
ขยายและปรับแต่งรูปแบบ
เมื่อสร้างรูปแบบของคุณเอง ให้ขยายรูปแบบที่มีอยู่จากเฟรมเวิร์กหรือไลบรารีการสนับสนุนเสมอ เพื่อให้มั่นใจว่ารูปแบบของคุณจะยังคงเข้ากันได้กับรูปแบบ UI ของแพลตฟอร์ม หากต้องการขยายรูปแบบ ให้ระบุรูปแบบที่ต้องการขยายด้วยแอตทริบิวต์ parent จากนั้นคุณจะลบล้างแอตทริบิวต์รูปแบบที่รับช่วงมาและเพิ่มแอตทริบิวต์ใหม่ได้
ตัวอย่างเช่น คุณสามารถรับช่วงลักษณะที่ปรากฏของข้อความเริ่มต้นของแพลตฟอร์ม Android และแก้ไขได้ดังนี้
<style name="GreenText" parent="@android:style/TextAppearance"> <item name="android:textColor">#00FF00</item> </style>
อย่างไรก็ตาม ให้รับช่วงรูปแบบแอปหลักจากไลบรารีการสนับสนุนของ Android เสมอ รูปแบบในไลบรารีการสนับสนุนจะมอบความเข้ากันได้โดยการเพิ่มประสิทธิภาพแต่ละรูปแบบสำหรับแอตทริบิวต์ UI ที่มีในแต่ละเวอร์ชัน รูปแบบไลบรารีการสนับสนุนมักจะมีชื่อคล้ายกับรูปแบบจากแพลตฟอร์ม แต่มี AppCompat รวมอยู่ด้วย
หากต้องการรับช่วงรูปแบบจากไลบรารีหรือโปรเจ็กต์ของคุณเอง ให้ประกาศชื่อรูปแบบหลัก โดยไม่มี ส่วน @android:style/ ที่แสดงในตัวอย่างก่อนหน้า ตัวอย่างเช่น ตัวอย่างต่อไปนี้จะรับช่วงรูปแบบลักษณะที่ปรากฏของข้อความจากไลบรารีการสนับสนุน
<style name="GreenText" parent="TextAppearance.AppCompat"> <item name="android:textColor">#00FF00</item> </style>
นอกจากนี้ คุณยังรับช่วงรูปแบบ (ยกเว้นรูปแบบจากแพลตฟอร์ม) ได้โดยการขยายชื่อรูปแบบด้วยสัญกรณ์จุด แทนที่จะใช้แอตทริบิวต์ parent นั่นคือ ให้ใส่คำนำหน้าชื่อรูปแบบของคุณด้วยชื่อรูปแบบที่ต้องการรับช่วง โดยคั่นด้วยจุด โดยปกติแล้วคุณจะทำเช่นนี้เมื่อขยายรูปแบบของคุณเองเท่านั้น ไม่ใช่รูปแบบจากไลบรารีอื่นๆ ตัวอย่างเช่น รูปแบบต่อไปนี้จะรับช่วงรูปแบบทั้งหมดจาก GreenText ในตัวอย่างก่อนหน้า แล้วเพิ่มขนาดข้อความ
<style name="GreenText.Large"> <item name="android:textSize">22dp</item> </style>
คุณสามารถรับช่วงรูปแบบเช่นนี้ได้หลายครั้งตามที่ต้องการโดยการเชื่อมชื่อเพิ่มเติม
หากต้องการดูแอตทริบิวต์ที่คุณประกาศด้วยแท็ก <item> ได้ โปรดดูตาราง "แอตทริบิวต์
XML" ในข้อมูลอ้างอิงคลาสต่างๆ มุมมองทั้งหมดรองรับ
แอตทริบิวต์ XML จากคลาส
View พื้นฐาน และมุมมองจำนวนมากจะเพิ่มแอตทริบิวต์พิเศษของตนเอง ตัวอย่างเช่น แอตทริบิวต์ XML
TextView
มีแอตทริบิวต์
android:inputType
ที่คุณใช้กับมุมมองข้อความที่รับอินพุตได้ เช่น วิดเจ็ต
EditText
ใช้รูปแบบเป็นธีม
คุณสามารถสร้างธีมได้ในลักษณะเดียวกับการสร้างรูปแบบ ความแตกต่างคือวิธีที่คุณใช้ธีม:
แทนที่จะใช้รูปแบบด้วยแอตทริบิวต์ style ในมุมมอง คุณจะใช้ธีมด้วย
แอตทริบิวต์ android:theme ในแท็ก <application> หรือ
แท็ก <activity> ในไฟล์ AndroidManifest.xml
ตัวอย่างเช่น วิธีใช้ธีม "มืด" ของ Material Design จากไลบรารีการสนับสนุนของ Android กับทั้งแอปมีดังนี้
<manifest ... > <application android:theme="@style/Theme.AppCompat" ... > </application> </manifest>
และวิธีใช้ธีม "สว่าง" กับกิจกรรมเดียวมีดังนี้
<manifest ... > <application ... > <activity android:theme="@style/Theme.AppCompat.Light" ... > </activity> </application> </manifest>
มุมมองทุกรายการในแอปหรือกิจกรรมจะใช้รูปแบบที่รองรับจากรูปแบบที่กำหนดไว้ในธีมนั้น หากมุมมองรองรับเฉพาะแอตทริบิวต์บางรายการที่ประกาศไว้ในรูปแบบ มุมมองจะใช้เฉพาะแอตทริบิวต์เหล่านั้นและละเว้นแอตทริบิวต์ที่ไม่รองรับ
ตั้งแต่ Android 5.0 (ระดับ API 21) และไลบรารีการสนับสนุนของ Android v22.1 เป็นต้นไป คุณยังระบุแอตทริบิวต์ android:theme ให้กับมุมมองในไฟล์เลย์เอาต์ได้ด้วย ซึ่งจะแก้ไขธีมสำหรับมุมมองนั้นและมุมมองย่อยทั้งหมด ซึ่งมีประโยชน์สำหรับการเปลี่ยนชุดสีของธีมในส่วนที่เฉพาะเจาะจงของอินเทอร์เฟซ
ตัวอย่างก่อนหน้าแสดงวิธีใช้ธีม เช่น Theme.AppCompat ที่ไลบรารีการสนับสนุนของ Android จัดหาให้ อย่างไรก็ตาม โดยปกติแล้วคุณจะต้องการปรับแต่งธีมให้เหมาะกับแบรนด์ของแอป วิธีที่ดีที่สุดคือการขยายรูปแบบเหล่านี้จากไลบรารีการสนับสนุนและลบล้างแอตทริบิวต์บางรายการ ดังที่อธิบายไว้ในส่วนต่อไปนี้
ลำดับชั้นของรูปแบบ
Android มีวิธีต่างๆ มากมายในการตั้งค่าแอตทริบิวต์ในแอป Android เช่น คุณสามารถตั้งค่าแอตทริบิวต์โดยตรงในเลย์เอาต์ ใช้รูปแบบกับมุมมอง ใช้ธีมกับเลย์เอาต์ หรือแม้แต่ตั้งค่าแอตทริบิวต์แบบเป็นโปรแกรม
เมื่อเลือกว่าจะจัดรูปแบบแอปอย่างไร ให้คำนึงถึงลำดับชั้นของรูปแบบใน Android โดยทั่วไป ให้ใช้ธีมและรูปแบบให้มากที่สุดเพื่อให้มีความสอดคล้องกัน หากคุณระบุแอตทริบิวต์เดียวกันในหลายๆ ที่ รายการต่อไปนี้จะกำหนดว่าแอตทริบิวต์ใดที่จะนำไปใช้ในท้ายที่สุด โดยรายการจะเรียงจากความสำคัญสูงสุดไปต่ำสุด
- การใช้การจัดรูปแบบระดับอักขระหรือย่อหน้าโดยใช้ช่วงข้อความกับคลาสที่ได้มาจาก
TextView-derived - การใช้แอตทริบิวต์แบบเป็นโปรแกรม
- การใช้แอตทริบิวต์แต่ละรายการกับมุมมองโดยตรง
- การใช้รูปแบบกับมุมมอง
- การจัดรูปแบบเริ่มต้น
- การใช้ธีมกับชุดมุมมอง กิจกรรม หรือทั้งแอป
- การใช้การจัดรูปแบบที่เฉพาะเจาะจงกับมุมมองบางรายการ เช่น การตั้งค่า
TextAppearanceในTextView
รูปที่ 2 การจัดรูปแบบจาก span จะลบล้างการจัดรูปแบบจาก textAppearance
TextAppearance
ข้อจำกัดอย่างหนึ่งของรูปแบบคือคุณใช้รูปแบบกับ View ได้เพียงรูปแบบเดียว อย่างไรก็ตาม ใน TextView คุณยังระบุแอตทริบิวต์ TextAppearance ที่ทำงานคล้ายกับรูปแบบได้ด้วย ดังที่แสดงในตัวอย่างต่อไปนี้
<TextView ... android:textAppearance="@android:style/TextAppearance.Material.Headline" android:text="This text is styled via textAppearance!" />
TextAppearance ช่วยให้คุณกำหนดการจัดรูปแบบที่เฉพาะเจาะจงกับข้อความได้โดยปล่อยให้รูปแบบของ View พร้อมใช้งานสำหรับการใช้งานอื่นๆ อย่างไรก็ตาม โปรดทราบว่าหากคุณกำหนดแอตทริบิวต์ข้อความโดยตรงใน View หรือในรูปแบบ ค่าเหล่านั้นจะลบล้างค่า TextAppearance
TextAppearance รองรับชุดย่อยของแอตทริบิวต์การจัดรูปแบบที่ TextView มีให้ ดูรายการแอตทริบิวต์ทั้งหมดได้ที่ TextAppearance
แอตทริบิวต์ TextView ทั่วไปบางรายการที่ไม่ได้รวมไว้ ได้แก่
lineHeight[Multiplier|Extra],
lines,
breakStrategy และ
hyphenationFrequency
TextAppearance ทำงานที่ระดับอักขระ ไม่ใช่ระดับย่อหน้า ดังนั้น
ระบบจึงไม่รองรับแอตทริบิวต์ที่ส่งผลต่อเลย์เอาต์ทั้งหมด
ปรับแต่งธีมเริ่มต้น
เมื่อคุณสร้างโปรเจ็กต์ด้วย Android Studio ระบบจะใช้ธีม Material Design กับแอปของคุณโดยค่าเริ่มต้น ดังที่กำหนดไว้ในไฟล์ styles.xml ของโปรเจ็กต์ รูปแบบ AppTheme นี้
จะขยายธีมจากไลบรารีการสนับสนุนและรวมการลบล้างแอตทริบิวต์สีที่องค์ประกอบ UI หลักใช้
เช่น แถบแอป และ
ปุ่มการทำงานแบบลอย หากมีการใช้ ดังนั้นคุณจึงปรับแต่งการออกแบบสีของแอปได้อย่างรวดเร็วโดยการอัปเดตสีที่ให้ไว้
ตัวอย่างเช่น ไฟล์ styles.xml จะมีลักษณะคล้ายกับไฟล์ต่อไปนี้
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style>
ค่ารูปแบบเป็นข้อมูลอ้างอิงถึงทรัพยากร
สีอื่นๆ ที่กำหนดไว้ในไฟล์
ของโปรเจ็กต์ res/values/colors.xml ซึ่งเป็นไฟล์ที่คุณแก้ไขเพื่อเปลี่ยนสี
ดู
ภาพรวมสีของ Material Design
เพื่อปรับปรุงประสบการณ์ของผู้ใช้ด้วยสีแบบไดนามิกและสีแบบกำหนดเองเพิ่มเติม
เมื่อทราบสีที่ต้องการแล้ว ให้อัปเดตค่าใน res/values/colors.xml ดังนี้
<?xml version="1.0" encoding="utf-8"?> <resources> <!-- Color for the app bar and other primary UI elements. --> <color name="colorPrimary">#3F51B5</color> <!-- A darker variant of the primary color, used for the status bar (on Android 5.0+) and contextual app bars. --> <color name="colorPrimaryDark">#303F9F</color> <!-- a secondary color for controls like checkboxes and text fields. --> <color name="colorAccent">#FF4081</color> </resources>
จากนั้นคุณจะลบล้างรูปแบบอื่นๆ ที่ต้องการได้ ตัวอย่างเช่น คุณสามารถเปลี่ยนสีพื้นหลังของกิจกรรมได้ดังนี้
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> ... <item name="android:windowBackground">@color/activityBackground</item> </style>
ดูรายการแอตทริบิวต์ที่คุณใช้ในธีมได้ที่ตารางแอตทริบิวต์ที่ R.styleable.Theme เมื่อเพิ่มรูปแบบสำหรับมุมมองในเลย์เอาต์ คุณยังค้นหาแอตทริบิวต์ได้โดยดูตาราง "แอตทริบิวต์ XML" ในข้อมูลอ้างอิงคลาสของมุมมอง ตัวอย่างเช่น มุมมองทั้งหมดรองรับ
แอตทริบิวต์ XML จากคลาส View
พื้นฐาน
แอตทริบิวต์ส่วนใหญ่ใช้กับมุมมองบางประเภท และบางแอตทริบิวต์ใช้กับมุมมองทั้งหมด อย่างไรก็ตาม แอตทริบิวต์ธีมบางรายการที่ระบุไว้ที่ R.styleable.Theme จะใช้กับหน้าต่างกิจกรรม ไม่ใช่กับมุมมองในเลย์เอาต์ ตัวอย่างเช่น windowBackground จะเปลี่ยนพื้นหลังของหน้าต่าง และ windowEnterTransition จะกำหนดภาพเคลื่อนไหวการเปลี่ยนภาพที่จะใช้เมื่อกิจกรรมเริ่มต้น ดูรายละเอียดเพิ่มเติมได้ที่หัวข้อเริ่ม
กิจกรรมโดยใช้ภาพเคลื่อนไหว
ไลบรารีการสนับสนุนของ Android ยังมีแอตทริบิวต์อื่นๆ ที่คุณใช้เพื่อปรับแต่งธีมที่ขยายจาก Theme.AppCompat ได้ด้วย เช่น แอตทริบิวต์ colorPrimary ที่แสดงในตัวอย่างก่อนหน้า คุณดูแอตทริบิวต์เหล่านี้ได้ดีที่สุดในไฟล์
ของไลบรารีattrs.xml
นอกจากนี้ ไลบรารีการสนับสนุนยังมีธีมอื่นๆ ที่คุณอาจต้องการขยายแทนธีมที่แสดงในตัวอย่างก่อนหน้า ตำแหน่งที่ดีที่สุดในการดูธีมที่พร้อมใช้งานคือ
ไฟล์
ของไลบรารีthemes.xml
เพิ่มรูปแบบที่เฉพาะเจาะจงกับเวอร์ชัน
หาก Android เวอร์ชันใหม่เพิ่มแอตทริบิวต์ธีมที่คุณต้องการใช้ คุณสามารถเพิ่มแอตทริบิวต์เหล่านั้นลงในธีมได้โดยที่ยังคงความเข้ากันได้กับเวอร์ชันเก่า สิ่งที่คุณต้องมีคือไฟล์ styles.xml อีกไฟล์หนึ่ง
ที่บันทึกไว้ในไดเรกทอรี values ซึ่งมี
ตัวระบุเวอร์ชันทรัพยากร
res/values/styles.xml # themes for all versions res/values-v21/styles.xml # themes for API level 21+ only
เนื่องจากรูปแบบในไฟล์ values/styles.xml พร้อมใช้งานสำหรับทุกเวอร์ชัน ธีมของคุณใน values-v21/styles.xml จึงรับช่วงรูปแบบเหล่านั้นได้ ซึ่งหมายความว่าคุณสามารถหลีกเลี่ยงการทำซ้ำรูปแบบได้โดยเริ่มต้นด้วยธีม "พื้นฐาน" แล้วขยายธีมนั้นในรูปแบบที่เฉพาะเจาะจงกับเวอร์ชัน
ตัวอย่างเช่น หากต้องการประกาศการเปลี่ยนภาพหน้าต่างสำหรับ Android 5.0 (API ระดับ 21) ขึ้นไป คุณต้องใช้แอตทริบิวต์ใหม่ ดังนั้นธีมพื้นฐานใน res/values/styles.xml จึงมีลักษณะดังนี้
<resources> <!-- Base set of styles that apply to all versions. --> <style name="BaseAppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="colorPrimary">@color/primaryColor</item> <item name="colorPrimaryDark">@color/primaryTextColor</item> <item name="colorAccent">@color/secondaryColor</item> </style> <!-- Declare the theme name that's actually applied in the manifest file. --> <style name="AppTheme" parent="BaseAppTheme" /> </resources>
จากนั้นเพิ่มรูปแบบที่เฉพาะเจาะจงกับเวอร์ชันใน res/values-v21/styles.xml ดังนี้
<resources> <!-- extend the base theme to add styles available only with API level 21+ --> <style name="AppTheme" parent="BaseAppTheme"> <item name="android:windowActivityTransitions">true</item> <item name="android:windowEnterTransition">@android:transition/slide_right</item> <item name="android:windowExitTransition">@android:transition/slide_left</item> </style> </resources>
ตอนนี้คุณสามารถใช้ AppTheme ในไฟล์ Manifest และระบบจะเลือกรูปแบบที่พร้อมใช้งานสำหรับ Android แต่ละเวอร์ชัน
ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ทรัพยากรทางเลือกสำหรับอุปกรณ์ต่างๆ ได้ที่หัวข้อ การจัดหาทรัพยากรทางเลือก
ปรับแต่งรูปแบบวิดเจ็ต
วิดเจ็ตทุกรายการในเฟรมเวิร์กและไลบรารีการสนับสนุนจะมีรูปแบบเริ่มต้น ตัวอย่างเช่น เมื่อคุณ
จัดรูปแบบแอปโดยใช้ธีมจากไลบรารีการสนับสนุน ระบบจะจัดรูปแบบอินสแตนซ์ของ
Button โดยใช้รูปแบบ
Widget.AppCompat.Button หากต้องการใช้รูปแบบวิดเจ็ตอื่นกับปุ่ม คุณสามารถทำได้โดยใช้แอตทริบิวต์ style ในไฟล์เลย์เอาต์ ตัวอย่างเช่น โค้ดต่อไปนี้จะใช้รูปแบบปุ่มไร้ขอบของไลบรารี
<Button style="@style/Widget.AppCompat.Button.Borderless" ... />
หากต้องการใช้รูปแบบนี้กับปุ่มทั้งหมด คุณสามารถประกาศรูปแบบนี้ใน buttonStyle ของธีมได้ดังนี้
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="buttonStyle">@style/Widget.AppCompat.Button.Borderless</item> ... </style>
นอกจากนี้ คุณยังขยายรูปแบบวิดเจ็ตได้เช่นเดียวกับการขยายรูปแบบอื่นๆ แล้วใช้รูปแบบวิดเจ็ตที่กำหนดเองในเลย์เอาต์หรือธีม
แหล่งข้อมูลเพิ่มเติม
ดูข้อมูลเพิ่มเติมเกี่ยวกับธีมและรูปแบบได้ที่แหล่งข้อมูลเพิ่มเติมต่อไปนี้
บล็อกโพสต์
- การจัดรูปแบบ Android: ธีมกับรูปแบบ
- การจัดรูปแบบ Android: แอตทริบิวต์ธีมทั่วไป
- การจัดรูปแบบ Android: แอตทริบิวต์ธีมที่แนะนำ