Android的神奇之处在于只通过R.id.XXX找到合适的资源.
AFAIK,资源被编译成二进制格式,那么这个映射逻辑如何在底层工作呢?
也许它的工作原理如下:
例如,在layout1.xml中,我们得到:
<Button android:id="@+id/button1" >
Run Code Online (Sandbox Code Playgroud)
和AAPT将在R.java中生成:
public static final int button1=0x7f05000b;
Run Code Online (Sandbox Code Playgroud)
当生成*.apk时,@ + id/button1将替换为"0x7f05000b".
因此,当我们打电话时:
findViewById(R.id.button1);
Run Code Online (Sandbox Code Playgroud)
我们基本上仍然根据ID进行搜索,尽管ID是一个像0x7f05000b的数字.
谢谢!
我真正想知道的是,如何将资源id整数解析为资源内容?换句话说,Android运行时如何以资源ID作为唯一线索来定位资源内容?
例如,如何找到具有资源ID的可绘制图片?或者如何找到具有资源ID的字符串值?
我在Google上搜索过,但找不到任何相关结果.
我还检查了官方Android文档,这个页面(所有可用资源)都是我能找到的.我在这个页面上找到的相关链接(到res/values/目录)是:
这些页面不会告诉您有关该res/values/public.xml文件的任何信息.
以下是我为此类文件找到的示例.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<public type="attr" name="commentTextColor" id="0xAA010007" />
<public type="drawable" name="add_icon_bl" id="0xAA020000" />
<public type="layout" name="act_date_picker" id="0xAA030001" />
<public type="anim" name="activity_slide_from_bottom" id="0xAA040000" />
<public type="xml" name="pref_menu" id="0xAA050000" />
<public type="raw" name="alert_bell_animation_bl" id="0xAA060000" />
<public type="array" name="taskRepeat" id="0xAA070000" />
<public type="color" name="theme_main_color_bl" id="0xAA080000" />
<public type="string" name="no_internet" id="0xAA0a0001" />
<public type="id" name="page1" id="0xAA0d0015" />
</resources>
Run Code Online (Sandbox Code Playgroud)
从type属性中可以看出,它包含了通常放在 …