由于Android的特殊机制,assets和raw目录下的文件不会被编译(即不能通过R.xx.id访问),所以我们只能采用LayoutInflater.from(Context context).inflate(XmlPullParser parser, @Nullable ViewGroup root)方法来访问其中的xml布局。
所以我们接着来看如何获取到XmlPullParset对象,通过context.assets可获取到AssetManager对象,而AssetManager则可以通过openXmlResourceParser(@NonNull String fileName)获取到XmlResourceParser对象。
所以通过上面的分析我们可得出下列代码:
fun getView(ctx: Context, filename: String): View? {
return LayoutInflater.from(ctx).inflate(am.openXmlResourceParser(filename), null)
}
1.当我们兴高采烈的写好demo,实机运行时,会遇到第一个坑:
程序抛出了FileNotFoundException的异常
java.io.FileNotFoundException: activity_main.xml
通过查阅资料后你发现原来要在文件名的前面加上"assets/"的前缀
2.这时你修改了你的代码,要对文件前缀进行判断
fun getView(ctx: Context, filename: String): View? {
var name = filename
if(!filename.startsWith(“assets/”)){
name &