目录:
Androiid 如何动态加载assets目录下的xml布局文件(包括Drawable xml)
博主是做sdk的,老大有个需求就是把一些资源文件都放到assets目录下一起打进jar包.查阅了一些相关博客,感觉都不全面,我就把我遇到的问题总结一下,希望朋友们以后遇到相同的问题能更好的处理.
- 如何动态加载布局
我们都用过LayoutInflater.infsater去添加一个布局
方法如下:
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.number_auto_roll, null);
我们查看inflater的源码会发现(比较懒,就直接把源码粘出来了,想看源码分析的自己Google)
public View inflate(XmlPullParser parser, @Nullable ViewGroup root, boolean attachToRoot) {
synchronized (mConstructorArgs) {
Trace.traceBegin(Trace.TRACE_TAG_VIEW, "inflate");
final Context inflaterContext = mContext;
final AttributeSet attrs = Xml.asAttributeSet(parser);
Context lastContext = (Context) mConstructorArgs[0];
mConstructorArgs[0] = inflaterContext;
View result = root;
try {
// Look for the root node.
int type;
while ((type = parser.next()) != XmlPullParser.START_TAG &&
type != XmlPullParser.END_DOCUMENT) {
// Empty
}
if (type != XmlPullParser.START_TAG) {
throw new InflateException(parser.getPositionDescription()
+ ": No start tag found!");
}
final String name = parser.getName();
if (DEBUG) {
System.out.println("**************************");
System.out.println("Creating root view: "
+ name);
System.out.println("**************************");
}
if (TAG_MERGE.equals(name)) {
if (root == null || !attachToRoot) {
throw new InflateException("<merge /