Nếu bạn đang ở trong tâm trạng pháp y thì đây là cách đào sâu và tìm hiểu những gì đang xảy ra.
android:background="?android:attr/activatedBackgroundIndicator"?
Theo trực giác, điều này có nghĩa là đặt nền thành một số có thể vẽ được.
Nhưng chúng ta hãy phân tích điều này hơn nữa để xem làm thế nào chúng ta đến được với cái có thể vẽ bí ẩn của mình.
Nói một cách chính xác, nó có nghĩa là "đặt thuộc tính nền thành thuộc tính" activeBackgroundIndicator " đề cập đến trong chủ đề hiện tại .
Nếu bạn hiểu phần "đề cập đến trong chủ đề hiện tại", về cơ bản bạn đã hiểu mọi thứ đang diễn ra đằng sau các trang bìa.
Về cơ bản, activeBackgroundIndicator không phải là một drawable thực tế mà là một tham chiếu đến một drawable . Vậy thuộc tính "activeBackgroundIndictor" thực sự được định nghĩa ở đâu?
Nó được xác định trong thư mục sdk của bạn trong một tên tệp attrs.xml . Ví dụ:
path_to_android_sdk / platform / android-17 / data / res / values / attrs.xml
Nếu mở tệp đó, bạn sẽ khai báo như sau:
<attr name="activatedBackgroundIndicator" format="reference" />
attrs.xml là nơi bạn khai báo tất cả các thuộc tính mà sau này bạn sẽ sử dụng trong chế độ xem xml của mình. Lưu ý rằng chúng tôi đang khai báo thuộc tính và kiểu của nó chứ không thực sự gán giá trị ở đây .
Giá trị thực được gán trong themes.xml . Tệp này được đặt tại:
path_to_android_sdk / platform / android-17 / data / res / values / themes.xml
Nếu bạn mở tệp đó, bạn sẽ thấy nhiều định nghĩa tùy thuộc vào chủ đề bạn đang sử dụng . Ví dụ, đây là các định nghĩa cho tên chủ đề Theme, Theme.Light, Theme.Holo, Theme.Holo.Light tương ứng:
<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>
Bây giờ chúng tôi có những ngăn kéo bí ẩn của chúng tôi. Nếu bạn chọn cái đầu tiên, nó được xác định trong thư mục có thể vẽ tại:
path_to_android_sdk / platform / android-17 / data / res / drawable / active_background.xml
Nếu bạn mở tệp đó, bạn sẽ thấy định nghĩa của tệp có thể vẽ, điều quan trọng là bạn phải hiểu điều gì đang xảy ra.
<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>
Ở đây chúng ta đang định nghĩa một drawable với hai trạng thái - trạng thái mặc định chỉ là nền trong suốt và nếu trạng thái là "state_actiised" thì có thể drawable của chúng ta là "list_selector_background_selected".
xem liên kết này để biết thông tin cơ bản về các vật có thể kéo và trạng thái.
"list_selector_background_selected" là một tệp png có 9 bản vá nằm trong thư mục drawable-hdpi.
Bây giờ bạn có thể thấy lý do tại sao chúng tôi đã xác định activeBackgroundIndicator làm tài liệu tham khảo thay vì liên kết trực tiếp đến tệp có thể vẽ - nó cho phép bạn chọn tệp có thể vẽ phù hợp tùy thuộc vào chủ đề của bạn.