亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android 資源 id詳解及的動(dòng)態(tài)獲取

 更新時(shí)間:2016年12月30日 16:10:59   投稿:lqh  
這篇文章主要介紹了Android 資源 id詳解及的動(dòng)態(tài)獲取的相關(guān)資料,需要的朋友可以參考下

Android 資源 id詳解

我們平時(shí)獲取資源是通過 findViewById 方法進(jìn)行的,比如我們常在onCreate方法中使用這樣的語句:

btnChecked=(ImageView)findViewById(R.id.imgCheck);

findViewById是我們獲取layout中各種View 對(duì)象比如按鈕、標(biāo)簽、ListView和ImageView的便利方法。顧名思義,它需要一個(gè)int參數(shù):資源id。

資源id非常有用。Android回自動(dòng)為每個(gè)位于res目錄下的資源分配id,包括各種圖片文件、xml文中的”@+id”對(duì)象。res的子目錄幾乎總是固定的,比如每次都能見到的:drawable-xxxx、layout、values,以及不常見的:anim、xml、row、color。

Android教科書上告訴你:

res/drawable/用來存放圖片文件;

res/layout/用來存放布局定義文件;

res/values/用來存放一些變量、參數(shù)等文件。

這都是我們已經(jīng)知道的。此外,Android會(huì)為res目錄下的所有資源分配id,其主要的分配原則是:

drawable中的圖片文件總是每個(gè)文件一個(gè)資源id。

Xml文件中每個(gè)使用android:id=”@+id/xxx”的view都會(huì)被分配一個(gè)未用的資源id。

其他更復(fù)雜的規(guī)則也許每個(gè)人都會(huì)補(bǔ)充一些。

在 ADK 的API 中,有許多方法其實(shí)都會(huì)使用資源id作為參數(shù),

比如 getDrawable 方法 :

getResources().getDrawable(R.drawable.sendsms_bk));

從字面上看,getResouces方法返回一個(gè)android.content.res.Resources對(duì)象。

getDrawalbe方法返回一個(gè)Drawable對(duì)象,我們知道這就是一張圖片。

getDrawable方法使用的參數(shù)就是資源id。

但是,這些int型的資源id到底是些什么數(shù)字?或者它們都放在哪里。如果你夠細(xì)心,你可以在gen目錄的R.Java文件中找到它們。每個(gè)16進(jìn)制整型id都有一個(gè)很O-O 的屬性名字,它們都是public static final的,建議你不要手動(dòng)去修改它們。這些資源id位于不同類層次結(jié)構(gòu)中,你仔細(xì)看一看,會(huì)發(fā)現(xiàn)其中的一些規(guī)律,比如,drawable類中包含資源id其實(shí)代表了res/drawable目錄中的圖片文件;layout類中包含的資源id其實(shí)是代表了在res/layout目錄中的xml文件 ;id類中包含的資源id其實(shí)是代表了布局xml文件中使用了 android:id=”@+id/xxx”的widget對(duì)象——當(dāng)然如果你使用的是”@+Tyre/xxx”,則Android編譯時(shí)會(huì)在R.java 中創(chuàng)建一個(gè)叫做 Tyre 的類。

通過上面的了解,我們發(fā)現(xiàn)資源id就是以“R.”開頭的變量或?qū)傩浴驗(yàn)樗级x在R類中——這個(gè)類跟android.R不是同一個(gè)R,它們不在同一個(gè)包層次中。前者是定義了android框架自己的資源,比如:android.R.layout.simple_expandable_list_item_1、android.R.layout.simple_expandable_list_item_2。這些資源你使用過嗎?有時(shí)間不妨試試。而另一個(gè)R就是我們自己的R了,定義了我們自己的資源id。我們可以用面向?qū)ο蟮腞.xxx.yyy的方式使用資源id,當(dāng)然也可以直接用16進(jìn)制數(shù)來使用它們。

資源id在Android中是如此重要,因此我們只要獲得了資源id,即可獲得資源。因?yàn)槟承┣闆r下,我們不能使用某個(gè)常量作為資源id(因?yàn)槲覀兿胗靡粋€(gè)變量代替它),所以只能采用兩種方式動(dòng)態(tài)獲取資源id:

1、反射

java的反射是如此強(qiáng)大,以至于我們?cè)谧咄稛o路時(shí)總是想起它。我們來看一段代碼:

try{

 Field field=R.drawable.class.getField(type);

 int i= field.getInt(new R.drawable());

 Log.d(tag,i+"");

 return i;

}catch(Exception e){

 Log.e(tag,e.toString());

 return R.drawable.unknow;

}

type是一個(gè)變量,他的可能值會(huì)是“close”、“edit”、“icon”等。我們通過java的反射類Field 去訪問 R.drawable 類下面的某個(gè)字段。實(shí)際上,我們知道在R.drawable 下的字段就是 res.drawable-xxxx 目錄下的圖片文件的資源id。因此運(yùn)行上面的這段代碼,其實(shí)就是通過一個(gè)字符串去獲取對(duì)應(yīng)圖片文件的資源id。比如,當(dāng) type 的值為“icon”時(shí),上面的代碼會(huì)獲得res.drawable-xxxx目錄下的 icon.png 圖片文件的資源id并返回給我們。我們通過資源 id 來把圖片顯示在ImageView中就是順理成章的事了。

2、使用Resources 類的 getIdentifier方法

使用反射畢竟還是麻煩。如果同樣的事情用 android.content.res.Resources 類來干,就是兩句話而已:

Resources res=getResources();

return res.getIdentifier(type,"drawable",getPackageName());

getResources方法是來自于contenxt(也就是Activity類),它直接可以返回一個(gè)Resouces對(duì)象。而Resouces的getIdentifier方法可以返回R.java中的任何資源id,當(dāng)然,你必須指定3個(gè)參數(shù):字段名,類名,包名。包名指定了的 全限定名的包名部分,如果R 的全限定名為 android.R 或者 com.company.R,則包名在這里就是“android”或“com.company”。getPackageName其實(shí)是this.getPackageName(),它直接返回本類的包名。

類名則是資源所屬的類。比如我們知道的,在R.java 類中的幾個(gè)固定的類:drawable、id、string、layout等,在它們下邊又定義了許多資源id。

字段名則是資源id的名字。比如這個(gè)資源id定義:

public static final int del=0x7f020002;

del就是一個(gè)資源id的名字,0x7f020002則是它的16進(jìn)制值。

通過3個(gè)參數(shù),getIdentifier 方法就可以通過比較動(dòng)態(tài)的方式獲得資源id。

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • Java Springboot websocket使用案例詳解

    Java Springboot websocket使用案例詳解

    這篇文章主要介紹了Java Springboot websocket使用案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • IDEA搭建SpringBoot多模塊聚合工程過程詳解(多模塊聚合工程)

    IDEA搭建SpringBoot多模塊聚合工程過程詳解(多模塊聚合工程)

    這篇文章主要是介紹一下,如何在IDEA開發(fā)工具下,搭建一個(gè)基于SpringBoot的多模塊聚合工程項(xiàng)目,本篇文章,將項(xiàng)目模塊細(xì)分為幾個(gè)子工程模塊,在文中給大家詳細(xì)介紹過,對(duì)IDEA搭建SpringBoot多模塊聚合工程感興趣的朋友一起看看吧
    2022-04-04
  • 基于Java編寫一個(gè)PDF與Word文件轉(zhuǎn)換工具

    基于Java編寫一個(gè)PDF與Word文件轉(zhuǎn)換工具

    前段時(shí)間一直使用到word文檔轉(zhuǎn)pdf或者pdf轉(zhuǎn)word,尋思著用Java應(yīng)該是可以實(shí)現(xiàn)的,于是花了點(diǎn)時(shí)間寫了個(gè)文件轉(zhuǎn)換工具,感興趣的可以了解一下
    2023-01-01
  • SpringCloud OpenFeign 自定義響應(yīng)解碼器的問題記錄

    SpringCloud OpenFeign 自定義響應(yīng)解碼器的問題記錄

    我們?cè)谑褂?nbsp;Spring Cloud 微服務(wù)的時(shí)候,通常將返回結(jié)果使用一個(gè)JsonResult 類進(jìn)行封裝,本文重點(diǎn)介紹SpringCloud OpenFeign 自定義響應(yīng)解碼器的問題記錄,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • SpringBoot @PostConstruct和@PreDestroy的使用說明

    SpringBoot @PostConstruct和@PreDestroy的使用說明

    這篇文章主要介紹了SpringBoot @PostConstruct和@PreDestroy的使用說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • List集合中對(duì)數(shù)據(jù)實(shí)現(xiàn)多重規(guī)則進(jìn)行排序的案例

    List集合中對(duì)數(shù)據(jù)實(shí)現(xiàn)多重規(guī)則進(jìn)行排序的案例

    今天小編就為大家分享一篇關(guān)于List集合中對(duì)數(shù)據(jù)實(shí)現(xiàn)多重規(guī)則進(jìn)行排序的案例,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • jackson使用@JsonSerialize格式化BigDecimal解決.00不顯示問題

    jackson使用@JsonSerialize格式化BigDecimal解決.00不顯示問題

    這篇文章主要介紹了jackson使用@JsonSerialize格式化BigDecimal解決.00不顯示問題,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-02-02
  • mybatis查詢結(jié)果返回至實(shí)體類的示例代碼

    mybatis查詢結(jié)果返回至實(shí)體類的示例代碼

    這篇文章主要介紹了mybatis查詢結(jié)果返回至實(shí)體類的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java自動(dòng)拆箱空指針異常的解決

    Java自動(dòng)拆箱空指針異常的解決

    這篇文章主要介紹了Java自動(dòng)拆箱空指針異常的解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 關(guān)于maven本地倉庫的配置方式

    關(guān)于maven本地倉庫的配置方式

    這篇文章主要介紹了關(guān)于maven本地倉庫的配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06

最新評(píng)論