抽取布局文件的方法如下,其中fileName必须包含assets/路径:
public static View extractView(Context context, String fileName, ViewGroup root) throws Exception {
XmlResourceParser parser = context.getAssets().openXmlResourceParser(fileName);
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
return inflater.inflate(parser, root);
}
注意,如果root为null,那么该布局文件的根元素属性会被忽略,比如固定的长和宽等,解决的一个办法是在外层再嵌套一个ViewGroup。
抽取Drawable的方法是,其中fileName不必包含assets/路径:
public static Drawable extractDrawable(Context context, String fileName) throws Exception {
InputStream inputStream = context.getAssets().open(fileName);
TypedValue value = new TypedValue();
/** 传入TypeValue,指定资源的像素密度是基于320*480屏幕的 */
value.density = 160;
/** 传入Resources,以获取目标屏幕像素密度 */
Drawable drawable = Drawable.createFromResourceStream(context.getResources(), value, inputStream, fileName);
inputStream.close();
return drawable;
}
StateListDrawable添加状态时,enabled状态必须放在最后,值为false的状态只需取状态常量的相反数即可。
ProgressBar在xml文件中如果声明了进度,则在代码中更改ProgressDrawable无效,必须去除前述声明。