要求: 掌握 Android 中访问资源的方式
Android xml资源文件中@、@android:type、@*、?、@+含义和区别
@ 表示引用资源
格式 @type/name 表示引用自定义资源 如:android:text="@string/xxx"
格式 @android:type/name 表示引用系统自带的资源 如:android:text="@android:string/xxx"
@ 表示引用系统的非 public 资源
格式:@*android:type/name
系统资源定义分为 public 和 非 public,public 资源声明在 <sdk_path>\platforms\android-8\data\res\values\public.xml
注意:没在public.xml中声明的资源是google不推荐使用的。
? 表示引用主题属性
如 android:textColor="?android:textColorHighlight"
注意,这和资源引用非常类似,除了我们使用一个"?"前缀代替了"@"。当你使用这个标记时,你就提供了属性资源的名称,它将会在主题中被查找,所以你不需要显示声明这个类型(如果声明,其形式就是?android:attr/android:textDisabledColor)。除了使用这个资源的标识符来查询主题中的值代替原始的资源,其命名语法和"@"形式一致:?[namespace:]type/name,这里类型可选。
@+ 表示在创建资源
”+”表示在R.java中名为type的内部类中添加一条记录
如 android:id="@+id/text_view"
参考:Android xml资源文件中@、@android:type、@*、?、@+含义和区别
Android根据资源名获取资源ID
Resources res = getResources();
final String packageName = getPackageName();
int imageResId = res.getIdentifier("ic_launcher", "drawable", packageName);
int imageResIdByAnotherForm = res.getIdentifier(packageName + ":drawable/ic_launcher", null, null);
int musicResId = res.getIdentifier("test", "raw", packageName);
int notFoundResId = res.getIdentifier("activity_main", "drawable", packageName);
Log.i(LOGTAG, "testGetResourceIds imageResId = " + imageResId
+ ";imageResIdByAnotherForm = " + imageResIdByAnotherForm
+ ";musicResId=" + musicResId
+ ";notFoundResId =" + notFoundResId);