我们都知道R文件中的值都是常量值都会有final修饰符:
public final class R { public static final class dimen { public static final int MainActivityMargin = 0x7f040000; public static final int MainActivityViewMargin = 0x7f040001; } public static final class drawable { public static final int ic_launcher = 0x7f020005; public static final int item_dir_list_back_icon = 0x7f020006; public static final int item_dir_list_icon = 0x7f020007; } public static final class id { public static final int item_dir_list_icon_iv = 0x7f060005; public static final int item_dir_list_name_tv = 0x7f060006; public static final int main_cancle_btn = 0x7f060003; public static final int main_dir_path_lv = 0x7f060001; public static final int main_dir_path_tv = 0x7f060000; public static final int main_select_btn = 0x7f060002; } public static final class layout { public static final int activity_dir_select = 0x7f030000; public static final int item_dir_list = 0x7f030002; } public static final class string { public static final int action_settings = 0x7f050002; public static final int app_name = 0x7f050000; public static final int hello_world = 0x7f050001; } }
但是如果项目作为一个Library引用时,也就是右键项目文件夹----->Properties----->Android----->Library勾上了Is Library:
这时R文件中的常量值的final修饰符将会消失变成一个静态变量:
public final class R { public static final class attr { } public static final class dimen { /** MainActivity */ public static int MainActivityMargin=0x7f040000; public static int MainActivityViewMargin=0x7f040001; } public static final class drawable { public static int ic_launcher=0x7f020000; public static int item_dir_list_back_icon=0x7f020001; public static int item_dir_list_icon=0x7f020002; } public static final class id { public static int item_dir_list_icon_iv=0x7f060004; public static int item_dir_list_name_tv=0x7f060005; public static int main_cancle_btn=0x7f060003; public static int main_dir_path_lv=0x7f060001; public static int main_dir_path_tv=0x7f060000; public static int main_select_btn=0x7f060002; } public static final class layout { public static int activity_dir_select=0x7f030000; public static int item_dir_list=0x7f030001; } public static final class string { public static int action_settings=0x7f050002; public static int app_name=0x7f050000; public static int hello_world=0x7f050001; } }
但是其对应值是不会改变的,不过如果在项目中你用到switch来分支判断R文件中的常量值,如:
switch (v.getId()) { case R.id.main_select_btn: break; }
这时case可能就会报错:
原因是case表达式必须为一个常量值,而当项目作为引用时,R文件中的值从常量变为变量所以会报错,此时Google提供的一个方法就是把它转化为if-else语句,即在switch语句处 Ctrl+1 然后可以替换成if-else语句。