1. 程式人生 > >Android中資源各種引用方式?,@,@*等等

Android中資源各種引用方式?,@,@*等等

本文參考於http://www.cnblogs.com/greatverve/archive/2011/12/27/Android-xml.html,當然如果單純的轉載也沒什麼意思,在該博文基礎上增加一些自己總結的東西進行延伸

這幾天做系統開發涉及到actionbar的style修改,要從framework層改,不知道?android:attr/是從哪兒引用的屬性,給開發帶來了很大的困難

參考連結文章也可以看到,一般在開發中資源的引用分以下幾種

1,引用自定義或者本包下的資源:格式:@[package:]type/name

舉個例子:@drawable/filename,@string/stringitem,

2,引用系統資源(儲存位置為frameworks/base/core/res/res):

在介紹對系統資源的引用時先介紹一下如何新增系統資源,便於大家理解對系統資源引用的兩種方式

新增系統資源:

第一,與自定義資源類似,到系統資源目錄下(目錄如上所示)新增資源

第二,新增成功後如果想要讓其他包使用(比如Bluetooth應用),需要將該資源id手動新增到public檔案中去(這一步我以前一直以為是系統自動生成的,真是慚愧驚訝)。不同的type有不同的id排序,這個你在新增前可以參考public中別人新增的相同type,在該type的id的基礎上加1就是你的id

<public type="style" name="ThemeOverlay.Material.Dialog.Alert" id="0x010302d7" />

<public type="drawable" name="list_selector_holo_dark" id="0x010800b8"/>

<public type="string" name="usb_storage_removed" id="0x01040045" />

第三,接下來你就可以引用了,如果是在本包中引用,引用方式同1,如果是在其他包中引用,引用格式為:@android:type/name

但有些系統資源不是public資源但你又想引用怎麼辦?可以,格式為:@*android:type/name

綜上所述可以看到對於系統資源的引用有兩種方式

3,相信你見過有一些是這樣用的

?android:attr/selectableItemBackground
這是什麼意思呢?selectableItemBackgroud是一個主題屬性,也就是item,這個item會在一個theme中去定義,如下所示
<item name="selectableItemBackground">@drawable/item_background_material</item>

他引用這個屬性的意思就是,程式首先是找到該activity或者application引用的theme,包括theme的parent,找到theme後再去找該theme下的一個叫做selectableITEMBackground的item屬性,這個屬性對應的就是你所引用的資源