获取所有应用的资源id和uri

在某些应用中,为了实现应用apk资源放入重复利用,或者使用反射得到本应用的资源,需要使用反射反射方式获得,但Resources类中也自带了这种获取方式,并且功能更加强大


你可以获取string,color,drawable,raw,xml等文件,因此也就意味着,这里可以获取的资源是res中已定义的资源,对于控件id的获取,暂时无法做到


android.content.res.Resources.class

?
1
2
3
4
5
6
7
8
9
10
11
  public  int  getIdentifier(String name, String defType, String defPackage) {
         if  (name ==  null ) {
             throw  new  NullPointerException( "name is null" );
         }
         try  {
             return  Integer.parseInt(name);
         catch  (Exception e) {
             // Ignore
         }
         return  mAssets.getResourceIdentifier(name, defType, defPackage);
     }
一.获取资源的id

1.如下,我们可以获取当前应用的资源id

?
1
2
  int  drawableId = mContext.getResources().getIdentifier( "ic_launcher" , "drawable" , mContext.getPackageName());
  mImageView.setImageResource(drawableId);

2.我们也可以获取其他应用的资源id

?
1
2
3
4
5
Resources resources = context.getResources();
int  indentify= getResources().getIdentifier( "icon" "drawable" "org.anddev.android.testproject" );
 
int  resId = getResources().getIdentifier( "background" "color" , getPackageName());
startBtn.setTextColor(getResources().getColor(resId));

对于这种方式,我们也可以这么做

?
1
int  indentify = getResources().getIdentifier(org.loveandroid.androidtest:drawable/icon", null , null );


3.进行封装一下

?
1
2
3
4
5
6
7
8
9
10
11
12
public  static  int  getResourceId(Context context,String name,String type,String packageName){
         Resources themeResources= null ;
         PackageManager pm=context.getPackageManager();
         try  {
             themeResources=pm.getResourcesForApplication(packageName);
             return  themeResources.getIdentifier(name, type, packageName);
         catch  (NameNotFoundException e) {
 
             e.printStackTrace();
         }
         return  0 ;
  }


二.获取资源的uri

android系统中,应用的资源存储时也通常会被存入 数据库,也可以被共享,因此来说资源会获得应用的uri

?
1
2
Uri uri = Uri.parse( "android.resource://" +getPackageName()+ "/" +R.raw.xinyueshenhua);
Uri uri = Uri.parse( "android.resource://" +getPackageName()+ "/" +R.drawable.ic_launcher);

我们也可以进一步封装

?
1
2
3
4
public  static   Uri getResourceUri( int  resId,String packageName)
{
     return  Uri.parse( "android.resource://" +packageName+ "/" +resId);
}


三.获取系统资源

?
1
int  indentify = getResources().getIdentifier( "actionbar_bg" "drawable" , "android" );   //注意,最后一个参数必须是“android”
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值