Android中根據ID名動態獲取資源的兩個方法

2021-10-05 22:27:07 字數 2882 閱讀 8740

在開發中, 我們習慣了類似下面這種方式去實現引用資源:

context.getresources().getdrawable(r.drawable.flower);
但是,當我們提前知道這個資源的id,想動態去引用,而不是在id裡面固化應該怎麼辦呢? 比如某個資源的id是r.drawable.test_1, 而且有序的還有test_2,test_3, 我們如何動態的去引用它們?這裡有兩種方案:直接用反射和用resource的getidentifier()方法,它們原理都差不多利用反射實現.

第一種方法:

/**

* 輸入id,返回bitmap

* @param context

* @param id

* @return

*/public static bitmap getbitmapbyid(context context,string id)

public static int getresourceid(string name) catch (nosuchfieldexception e) catch (numberformatexception e) catch (illegalargumentexception e) catch (illegalacces***ception e)

return 0;

}

第二種方法(更加簡潔):

public static bitmap getbitmapbyid(context context,string id)
第二種方法中res.getidentifier()裡面三個引數: 第乙個是資源id名,第二個是類名,如果是string型別就是string,還有常見的drawable,layout等等,第三個引數是專案包名.

上面2種方法都能動態獲取資源,當我們知道某些資源的id是規律性的,比如字首相同,字尾都是a-z 或者數字排序等等,就能動態構造id獲取資源,而不必每次都寫context.getresources().getdrawable(r.drawable.test_1);

一,獲取android工程裡面的各種資源的id;

1.1 string型 比如下面:

<< string name=」ok」>> 客戶端請求成功 << / string>>

//string資源中 名稱為ok的 id 獲取方式

int strid = getresources().getidentifier("ok", "string", getpackagename());

1.2 color型 比如下面:

<< color name=」colorprimary」>>#3f51b5 << /color>>

//color資源中 id 獲取

int colorid = getresources().getidentifier("colorprimary", "color", getpackagename());

1.3 dimens型 比如下面:

<< dimen name=」horizontal_margin」>16dp<< /dimen>>

//deimens資源 id 獲取

int dimenid = getresources().getidentifier("horizontal_margin", "dimen", getpackagename());

1.4 mipmap資料夾下或者drawable資料夾下面的:比如ic_launcher.png

// mipmap資料夾下的名稱為ic_launcher的的id      

//mipmap資源id

int mipmapid = getresources().getidentifier("ic_launcher", "mipmap", getpackagename());

1.5布局檔案資源 比如r.layout.activity_main

//布局檔案的id,比如:r.layout.activity_main       

//布局資源id

int layoutid = getresources().getidentifier("activity_main", "layout", getpackagename());

二.獲取android系統裡面的資源id

//獲取系統裡的資源id android.r.drawable.ic_menu_share

intid = getresources().getidentifier("ic_menu_share", "drawable", "android"); //注意,最後乙個引數必須是「android

三.獲取android工程資源的uri路徑,一般是,res或者asset下的

//*獲取res資源的url  contentresolver.scheme_android_resource*/

uri uri = uri.parse("android.resource://" + getpackagename() + "/" + r.mipmap

.ic_launcher);

uri uri = uri.parse("res:///" + r.mipmap

.ic_launcher);

//*獲取asset資源的url,contentresolver.scheme_file*/

uri asseturi = uri.parse("file:///android_asset/" + "qq.png");

Android根據包名 啟動 刪除 應用

啟動應用,獲取包名 和對應的啟動activity名字 packageinfo info getpackagemanager getpackageinfo packname,packagemanager.get uninstalled packages packagemanager.get activ...

sqlalchemy根據表名動態建立model類

sqlalchemy根據表名動態建立model類 作用如題,直接上 吧,另外還支援 copy一張表的表結構,新建表並獲得model物件 coding utf 8 import traceback from sqlalchemy import biginteger,column,datetime,in...

sqlalchemy根據表名動態建立model類

作用如題,直接上 吧,另外還支援 copy一張表的表結構,新建表並獲得model物件 coding utf 8 import traceback from sqlalchemy import biginteger,column,datetime,integer,metadata,string,tab...