หากคุณอยู่ในอารมณ์ทางนิติวิทยาศาสตร์นี่คือวิธีการขุดและค้นหาว่าเกิดอะไรขึ้น
android:background="?android:attr/activatedBackgroundIndicator"?
โดยสัญชาตญาณหมายถึงการตั้งค่าพื้นหลังเป็นวาดได้
แต่มาย่อยสลายสิ่งนี้เพิ่มเติมเพื่อดูว่าเราไปถึงสิ่งที่วาดได้ลึกลับของเราอย่างไร
จะแม่นยำมันหมายถึง "ตั้งแอตทริบิวต์พื้นหลังเพื่อสิ่งที่แอตทริบิวต์ 'activatedBackgroundIndicator' หมายถึงในรูปแบบปัจจุบัน
หากคุณเข้าใจส่วน "อ้างถึงในธีมปัจจุบัน" แสดงว่าคุณเข้าใจทุกอย่างที่เกิดขึ้นหลังปก
โดยทั่วไปactivatedBackgroundIndicator ไม่ได้เป็น drawable ที่เกิดขึ้นจริง แต่มีการอ้างอิงถึง drawable แอตทริบิวต์ "enableBackgroundIndictor" ถูกกำหนดไว้ที่ไหนจริง ๆ ?
มันกำหนดไว้ในไดเรกทอรี SDK ของคุณในชื่อไฟล์attrs.xml ตัวอย่างเช่น:
path_to_android_sdk / platforms / android-17 / data / res / values / attrs.xml
หากคุณเปิดไฟล์นั้นคุณจะประกาศดังต่อไปนี้:
<attr name="activatedBackgroundIndicator" format="reference" />
attrs.xml คือที่ที่คุณประกาศแอตทริบิวต์ทั้งหมดที่คุณจะใช้ในมุมมอง xml ของคุณในภายหลัง หมายเหตุเราจะประกาศแอตทริบิวต์และประเภทและไม่จริงการกำหนดค่าที่นี่
ค่าที่แท้จริงที่ได้รับมอบหมายในthemes.xml ไฟล์นี้อยู่ที่:
path_to_android_sdk / platforms / android-17 / data / res / values / themes.xml
ถ้าคุณเปิดแฟ้มที่คุณจะเห็นคำจำกัดความหลายขึ้นอยู่กับสิ่งที่รูปแบบที่คุณกำลังใช้ ตัวอย่างเช่นต่อไปนี้เป็นคำจำกัดความของชื่อธีม Theme, Theme.Light, Theme.Holo, Theme.Holo.Light ตามลำดับ:
<item name="activatedBackgroundIndicator">@android:drawable/activated_background</item>
<item name="activatedBackgroundIndicator">@android:drawable/activated_background_light</item>
<item name="activatedBackgroundIndicator">@android:drawable/activated_background_holo_dark</item>
<item name="activatedBackgroundIndicator">@android:drawable/activated_background_holo_light</item>
ตอนนี้เรามี drawables ลึกลับของเราแล้ว หากคุณเลือกอันแรกจะถูกกำหนดไว้ในโฟลเดอร์ที่วาดได้ที่:
path_to_android_sdk / platforms / android-17 / data / res / drawable / activated_background.xml
หากคุณเปิดไฟล์นั้นคุณจะเห็นคำจำกัดความของไฟล์ที่ดึงได้ซึ่งมีความสำคัญต่อการทำความเข้าใจว่าเกิดอะไรขึ้น
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true" android:drawable="@android:drawable/list_selector_background_selected" />
<item android:drawable="@color/transparent" />
</selector>
ที่นี่เรากำลังกำหนด Drawable ที่มีสองสถานะ - สถานะเริ่มต้นเป็นเพียงพื้นหลังโปร่งใสและหากสถานะเป็น "state_activated" สิ่งที่ดึงได้ของเราคือ "list_selector_background_selected"
ดูลิงค์นี้สำหรับข้อมูลพื้นฐานเกี่ยวกับ drawables และ state
"list_selector_background_selected" คือไฟล์ png แพทช์ 9 ไฟล์ที่อยู่ในโฟลเดอร์ drawable-hdpi
ตอนนี้คุณสามารถดูได้แล้วว่าทำไมเราถึงกำหนด activatedBackgroundIndicator เป็นข้อมูลอ้างอิงแทนที่จะเชื่อมโยงโดยตรงกับไฟล์ที่วาดได้ซึ่งจะช่วยให้คุณสามารถเลือกสิ่งที่วาดได้ที่เหมาะสมขึ้นอยู่กับธีมของคุณ