Android之?,@,@+代表的作用和意義

Android之?,@,@+代表的作用和意義

文章鏈接:http://blog.csdn.net/qq_16628781/article/details/68942135

知識點

  1. 資源文件簡介;
  2. @,?的作用和意義;
  3. @的使用;
  4. @+的使用;
  5. 新名詞記錄{資源文件引用@,?;}

概述

在android開發中,資源文件裏總是會出現”@string/hello” 、“@android:color/darker_gray”、”@+id/title”、”?android:attr/textAppearanceSmall”,的引用,改如何來理解呢?

我們都知道,我們在資源文件中定義的attr,drawable,values,miamap,string,color,dimens和Androidmanifest文件等,IDE會幫我們編輯在一個叫R.java的文件下面。比如你定義的一個圖片名字叫icon,那麼在R.java文件中,會建立一個drawable的靜態內部類,然後生成一個唯一的標識符(一串數字)代表這個icon圖片,我們就可以通過“@drawable/icon”的方式獲取。其中“@”代表的是R.java 類,“drawable”代表R.java 中的靜態內部類“drawable”,“/icon”代表靜態內部類“drawable”中的靜態屬性“icon”。

既然知道了這個,那麼我們如何來引用標識符和添加標識符呢?


@號

引用的格式

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

< package_name>是可選的,默認引用的是當前包名下的資源文件。我們也可以加上android包名,表示引用系統的資源文件。

@引用的android系統定義好的資源文件裏。因爲在Android系統中自己也有用到很多的資源文件,爲了和系統樣式統一起來,我們也可以引用系統的資源,使界面更加統一和諧。所以我們如果把包名換成android的話,就可以引用到系統定義好的資源了。如下所示:

android:textAppearance="?android:attr/textAppearanceSmall" 
android:textAppearance="?android:attr/textAppearanceMedium"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textAppearance="?android:attr/textAppearanceLarge”
@android:color/darker_gray

上面代碼引用的是系統的文字樣式和系統的顏色darker_gray。

@引用自定義的資源文件,在R.java文件裏面找對應的資源標示符,我們可以不寫包名,默認的就是我們自己的包名。
在res目錄下面,有我們定義的string,color,drawable,anim,layout,xml,dimen等等,我們都可以這樣來引用。
代碼如下:

@string/app_name
@color/blue_light
@drawable/app_icon

對應的就是R.java文件下面的string靜態內部類的一個叫app_name的字符串資源。這個string是在你的string文件下面定義的。

?號

則是引用的當前的的主題的屬性。資源值允許你引用當前主題中的屬性值。這個屬性值只能在樣式資源和XML屬性中使用;它允許你通過將它們改變爲當前主題提供的標準變化來改變UI元素的外觀,而不是提供具體的值。

語法格式如下:

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

例如:

android:textColor="?android:textDisabledColor"
//?android:attr/android:textDisabledColor

代表引用的是主題中按鈕不可用時的顏色。

注意:前面的?號,其中包名和資源類型是可選的。


引用的是系統定義好的顏色值:darker_gray;當然,如果你不想要用系統定義的資源,可以自己定義,在@+的時候已經講過了。


“@+”號

如果我們需要引用資源,那麼就必須要在R.java文件中添加一條記錄(標識符),方可進行引用。那麼如何來添加一條記錄呢?

格式如下:

@+<resource_type>/<resource_name>

我們用的最多的就是爲控件加入id,以便在代碼中引用。如我們android:id=”@+id/tv_title”,表明在R.java文件的靜態內部類id下查找對應的標識符,若不存在,則創建,添加一個tv_title的資源標識符;同理的,在string,dimens和styles裏面,也是使用@+id的方式添加標識符。但是在drawable,mipmap,anim和attr目錄下面呢?這裏系統是默認利用文件夾的名字作爲resource_type了。所以我們就可以根據drawable來進行訪問了。

就到這裏了。
如有任何問題,請及時與我聯繫,謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章