Theme.AppCompat ใช้เพื่อตั้งค่าธีมส่วนกลางสำหรับทั้งแอป ThemeOverlay.AppCompat ใช้เพื่อแทนที่ (หรือ "วางซ้อน") ธีมนั้นสำหรับมุมมองเฉพาะโดยเฉพาะ Toolbar
ลองดูตัวอย่างว่าเหตุใดจึงจำเป็น
ธีมแอพที่มี ActionBar
โดยปกติแล้ว ActionBar จะแสดงในแอป ฉันสามารถเลือกสีได้โดยการตั้งcolorPrimary
ค่า อย่างไรก็ตามการเปลี่ยนธีมจะเปลี่ยนสีของข้อความบน ActionBar
<style name="AppTheme" parent="Theme.AppCompat">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
เนื่องจากสีหลักของฉันเป็นสีน้ำเงินเข้มฉันจึงควรใช้หนึ่งในธีมที่ใช้สีข้อความอ่อนในแถบการทำงานเพราะข้อความสีดำอ่านยาก
การซ่อน ActionBar และการใช้ Toolbar
จุดรวมของการใช้ Theme.AppCompat แทนที่จะเป็น Theme.Material คือเพื่อให้เราสามารถอนุญาตให้ Android เวอร์ชันเก่าใช้ธีมดีไซน์ Material ของเราได้ ปัญหาคือ Android เวอร์ชันเก่าไม่รองรับ ActionBar ดังนั้นเอกสารประกอบจึงแนะนำให้ซ่อน ActionBar และเพิ่ม Toolbar ในเค้าโครงของคุณ ในการซ่อน ActionBar เราต้องใช้หนึ่งในNoActionBar
ธีม ภาพต่อไปนี้แสดงแถบเครื่องมือที่มี ActionBar ซ่อนอยู่
แต่ถ้าฉันต้องการบางอย่างเช่นธีมแสงกับ DarkActionBar ล่ะ? เนื่องจากฉันต้องใช้ NoActionBar นั่นจึงไม่ใช่ตัวเลือก
การลบล้างธีมของแอพ
นี่คือที่ที่ ThemeOverlay เข้ามาฉันสามารถระบุธีม Dark ActionBar ในเค้าโครง xml Toolbar ของฉันได้
<android.support.v7.widget.Toolbar
...
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
ในที่สุดสิ่งนี้ก็ช่วยให้เรามีเอฟเฟกต์ที่เราต้องการ ธีม Dark.ActionBar ซ้อนทับธีมแอพ Light สำหรับโอกาสนี้โดยเฉพาะ
- ธีมแอป:
Theme.AppCompat.Light.NoActionBar
- ธีมแถบเครื่องมือ:
ThemeOverlay.AppCompat.Dark.ActionBar
หากคุณต้องการให้เมนูป๊อปอัพสว่างคุณสามารถเพิ่มสิ่งนี้:
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
ศึกษาเพิ่มเติม
ฉันเรียนรู้สิ่งนี้ผ่านการทดลองและจากการอ่านบทความต่อไปนี้