<Android>关于获取资源文件R中的数据

通常我们都会使用context.getResources().getIdentifier(name, type,context.getPackageName())的方法去获取R.java中的数据。

type——R其中的内部类名,如"drawable","string","color","dimen","layout"等,这也是我们常用的关于界面所需要获取的数据类型。

name——R内部类中的static变量名称,如"appname"等,这些都是有用户在xml文件中定义的,包括layout,drawable文件中xml的文件名称。

最后一个参数就是apk的包名。

其实为何使用context.getResources().getIdentifier来获取资源的数值,很简单,在开发属于自己的sdk的时候,因为你的资源文件和jar包供给其他人使用,在界面方面自然都会使用此方法来获取资源对应数值。

接着回到正题,因为在开发属于自己的控件,用到了attr自定义属性,在期间发现一个问题,即styleable的数值无法使用context.getResources().getIdentifier来获取,结果永远都是0,而且styleable中还包括数组数据,所以最后还是用java的反射方法来获取。上代码:

/**

* 对于context.getResources().getIdentifier无法获取的数据,或者数组

* 资源反射值

* @paramcontext

* @param name

* @param type

* @return

*/

private static Object getResourceId(Context context,String name, String type) {

String className = context.getPackageName() +".R";

try {

Class<?> cls = Class.forName(className);

for (Class<?> childClass : cls.getClasses()) {

String simple = childClass.getSimpleName();

if (simple.equals(type)) {

for (Field field : childClass.getFields()) {

String fieldName = field.getName();

if (fieldName.equals(name)) {

System.out.println(fieldName);

return field.get(null);

}

}

}

}

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

/**

*context.getResources().getIdentifier无法获取到styleable的数据

* @paramcontext

* @param name

* @return

*/

public static int getStyleable(Context context, Stringname) {

return ((Integer)getResourceId(context, name,"styleable")).intValue();

}

/**

* 获取styleable的ID号数组

* @paramcontext

* @param name

* @return

*/

public static int[] getStyleableArray(Context context,String name) {

return (int[])getResourceId(context, name,"styleable");

}

时间: 2024-08-07 10:17:18

<Android>关于获取资源文件R中的数据的相关文章

android 获取资源文件 R.drawable中的图片转换为drawable、bitmap(转载)

转载自:android 获取资源文件 R.drawable中的图片转换为drawable.bitmap 1. Resources resources = mContext.getResources();Drawable drawable = resources.getDrawable(R.drawable.a);imageview.setBackground(drawable); 2. Resources r = this.getContext().getResources();Inputstr

android 获取资源文件 r.drawable中的图片转换为drawable、bitmap

1. Resources resources = mContext.getResources(); Drawable drawable = resources.getDrawable(R.drawable.a); imageview.setBackground(drawable); 2. Resources r = this.getContext().getResources(); Inputstream is = r.openRawResource(R.drawable.my_backgrou

获取资源文件 r.drawable中的图片转换为drawable、bitmap

1. Resources resources = mContext.getResources(); Drawable drawable = resources.getDrawable(R.drawable.a); imageview.setBackground(drawable); 2. Resources r = this.getContext().getResources(); Inputstream is = r.openRawResource(R.drawable.my_backgrou

Java中获取资源文件的方法总结

这里总结3中方法获取资源文件的 ServletContext Class ClassLoader 文件的位置 1. ServletContext public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter pw = response.getWriter(); ServletContext context

servlet和普通类获取资源文件的方法

package cn.servlet.demo1; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.Properties; import javax.servlet

Android使用 SVG 资源文件(一)

这里就不介绍背景了,直接说说在 Android 中如何使用 SVG资源吧! 使用步骤: 1.SVG资源的源文件 要使用 SVG资源,我们首先得有 svg 资源,在哪里找呢,有很多工具能够生成 SVG资源,比如omnigraffle图形编辑器,我这里生成好了一张 SVG资源的图片 用浏览器打开之后可以看到它的代码 我们所要的就是path 之后的 svg 代码,把它拷贝到我们的代码中 M 6.783868 184 C 6.783868 184 7.349524 160.57912 14.131572

wpf 前台获取资源文件路径问题

1 <ImageBrush ImageSource="YT.CM.CommonUI;component/Resource/FloadwindowImage/middle.png"/> YT.CM.CommonUI  这是一个类库名字 Resource 这是类库下的文件夹 FloadwindowImage 是Resource下的文件夹 middle.png 是FloadwindowImage下的一张图片 若在使用上句在wpf前台获取该类库下的文件夹中的图片资源,可能会报该路径

android 如何从服务器端的数据库中拿数据,在客户端显示类?

============问题描述============ android 如何从服务器端的数据库中拿数据,在客户端显示类? ============解决方案1============ 写一个网络访问的api,Android通过API取到数据, ============解决方案2============ 有種WebService的方法可以將資料用xml格式傳送取得 ============解决方案3============ 为神马要直接访问数据库呢 叫服务端给你开放几个接口不就行了么- - ===

springboot jar包运行中获取资源文件

1. 今天晚上写了一个程序,基于Spring boot的一个小网站,发现使用FileUtils.class.getResource(path)来获取jar包中的资源文件并不能成功,其路径很奇怪 file:/Users/lonecloud/Documents/ideaCode/git/export/target/export-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/temp/temp.xls 查阅资料后,并且查看jar包中的资源文件发现有!还有classes!这