Android訪問(wèn)資源與屬性之 ? , @

Android訪問(wèn)資源與屬性之 ? , @

在Android xml中訪問(wèn)資源和樣式屬性的語(yǔ)法有著固定的格式,但是也有些靈活變化。
比如通過(guò)xml布局設(shè)置一個(gè)viewbackground color的幾種方法:

android:background="@color/colorPrimary"
android:background="@com.myapp:color/colorPrimary"
android:background="?colorPrimary"
android:background="?attr/colorPrimary"
android:background="?com.myapp:attr/colorPrimary"
android:background="?com.myapp:colorPrimary"
android:background="?android:colorPrimary"
android:background="?android:attr/colorPrimary"

上面這些語(yǔ)法主要區(qū)別是對(duì)資源的訪問(wèn)和對(duì)樣式屬性的訪問(wèn),詳細(xì)可參考Android開(kāi)發(fā)官網(wǎng)

引用資源(resources) 與 引用樣式屬性(style attribute) 的區(qū)別

@ 引用資源 (resources)

使用@語(yǔ)法引用資源時(shí),是在訪問(wèn)一個(gè)實(shí)際的值(官網(wǎng)上標(biāo)題使用 Accessing Resouces),這個(gè)資源必須有具體的值,我們能明確的知道自己使用的是哪個(gè)具體值。

比如定義了一個(gè)color資源:

.../values/color.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#5F51B5</color/
</resources>

然后在xml中引用這個(gè)資源android:background="@color/colorPrimary",那么不管Activity是什么主題,background的值始終是確定值#5F51B5

? 引用樣式屬性 (style attribute)

使用?語(yǔ)法時(shí),表示嘗試引用一個(gè)樣式屬性(Referencing style attributes),具體的值取決于當(dāng)前使用的主題。在特定的主題下,可以重寫(xiě)這個(gè)屬性,因此不需要改變xml主題,只需要應(yīng)用恰當(dāng)?shù)闹黝},background具體值就改變了。

<resource>
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">#F0A</item>
    </style>
</resource>
<TextView
    android:id="@+id/tv_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="?colorPrimary"

在這種情況下,我們?cè)儐?wèn)Android:“嘿,把當(dāng)前主題下定義的colorPrimary屬性的值給我”。所以我們很難告訴你background到底會(huì)是什么顏色,因?yàn)樗Q于這個(gè)布局所屬的activity所應(yīng)用的主題。

語(yǔ)法

引用資源 (@)

在xml中引用一個(gè)資源使用下面這個(gè)語(yǔ)法:

@[<package_name>:]<resource_type>/<resource_name>

  • <package_name> 引用資源所在包的包名,** 如果在同一個(gè)包下引用,不是必須的; 使用android表示使用系統(tǒng)資源 **
  • <resource_type> R類的子集,即資源的類型(attr, color, string, dimen 等等)
  • <resource_name> 資源名稱,可以是不帶后綴的資源文件名或者定義在xml中的資源

引用樣式屬性 (?)

?[<package_name>:][<resource_type>/]<resource_name>

引用樣式屬性語(yǔ)法和引用資源除了前綴是?,其他是一樣的,其中<resource_type>/是個(gè)可選項(xiàng),因?yàn)橐脴邮綄傩晕ㄒ坏馁Y源類型是attr,android打包工具允許我們省略資源類型。

所以從Android角度來(lái)看,下面的表述方式是完全一樣的:

android:background="?com.myapp:attr/colorPrimary" // verbose format
android:background="?com.myapp:colorPrimary" // attr is skipped since its optional
android:background="?attr/colorPrimary" // package is skipped since its optional
android:background="?colorPrimary" // package & attr is skipped

引用系統(tǒng)樣式屬性:?android:colorPrimary

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,523評(píng)論 25 708
  • 你心有些散 得靜下來(lái)。 書(shū)還要看 題還得刷。 學(xué)校定了吧? “定了?!?那就好 慢慢來(lái) 不要急 量變到質(zhì)變還需要些...
    一盞星光閱讀 210評(píng)論 0 0
  • 2017年2月有幸做了母親。因?yàn)槌鲱A(yù)產(chǎn)期一周并且骨盆條件不佳而選擇了剖腹產(chǎn)。當(dāng)聽(tīng)到寶寶第一聲啼哭時(shí),有落淚的沖動(dòng)...
    羽小辰閱讀 375評(píng)論 0 0
  • 7個(gè)基本指標(biāo): 先用一個(gè)你熟悉的知識(shí)門類來(lái)檢查。例如:哲學(xué)。如果你熟悉的門類的書(shū)種很不完整,當(dāng)然值得你懷疑其他門類...
    歌兒_9740閱讀 162評(píng)論 1 1
  • 1. 最近幾天的朋友圈涇渭分明的站成了三個(gè)派系: 被指責(zé)成口紅婊的女人,指責(zé)跟男友要YSL的女人是口紅婊的女人、和...
    赤木與森閱讀 4,732評(píng)論 16 86