篇幅太长不想看,直接看总结
众所周知,Android中Activity加载布局的办法常用的有以下几种:
setContentView(View view)
shtmletContentView(html5@LayoutRes int layoutResID)
View的加载办法可经过下列办法加载:
View.inflate(Context context, @LayoutRes int resource, ViewGroup root)
LayoutInflandroid系统ater.from(Context context).inflate(@LayoutRes int resource, @Nullable ViewGroup root)
LaappstoreyoutInflatandroid的drawable类er.from(Context context).inflate(XmlPullParser parser, @Nullable ViewGroup roAPPot)
因为A源码编辑器手机版下载ndroid的特别机制,assets和raw目录下的文件不会被编译(即不能经过R.xx.id访问),所以咱们只能选用Layappearanceouthtml简单网页代码Inflater.from(Context context).android下载安装inflate(XmlPullParser parser, @Nullable ViewGroup root)办法来访问其间的xml布局android下载。
所以咱们接着来看怎样获取到XmlPullParset政策,经过context.assets可获取到AssetManhtml是什么意思ager政策,而AssetManager则能够经过openXmlResourceParser(@NonNull String fileName)获取到XmlResour源码网站ceParser政策。
所以经过上面的剖析咱们可得出html下列代码:
fun geandroid比赛专用包tView(ctx: Context, filename: String): View? {
return LayoutInflater.from(ctx).inflate(am.openXmlResourceParserandroid比赛专用包(filename), null)
}
1.当咱们兴高采烈的写好demo,实机工作时,会遇到第一个坑:
程序抛出了FileNotFoundException的失常
java.i源码编辑器手机版下载o.FileNotFoundException: activity_main.xml
经过查阅资料后你发现原来要在文件名的前面加上”assets/”的前缀
2.这时你批改了你的代码,要对文件前缀进行判别
fun getView(ctx: Context, filename: String): View? {
var name = filen源码时代训练怎样样ame
if(!filename.startsWith("assets/")){
name = "assets/$filenameapproach"
}
return LayoutInflandroid/yunosater.from(ctx).inflate(am.openXmlResourceParser源码网站(name), null)
}
批改完Java代码后,你紧接着开始了第二波查验,却发现程序又抛出了失常:
java.io.FileNotFoundException: Corrupt XML binary fileappear
这个差错则代表这你的xml布局文件格式不对,放入到assets目录下的xml文件应该是编译后的文件(即apk中xmlAPP文件)如下图:
3.所以appreciate你将你的apk中的layouhtml个人网页完好代码t/acti源码是什么意思vity_main.xml拷贝到工程的assets目录下,开始了第三波查验:
这时你发现APK工作正常,但是你冥冥中发现了一丝不对劲,approach你发现你即便能拿到该布局所对应的Vhtml标签特点大全iewGroup,却发现并不能经过findViewById(id)办法来获取到子View,所以你开始检查ViewGroup的源码,机警的你发现了如下办法:
public final <T extends View> T findViewWithTag(Object tag) {
if (tag == null) {
return null;
}
return findapplicationViewWithTagTravejava怎样读rsal(tag);
}
该办法能够经过设置的tag,来获android比赛专用包取到appearance对应的子android是什么手机牌子View
4.源码之家所以你在xml中为子View设置好tag后,写好代码,开始了第四波查验
这时候app下载你检查手机上的APP,发现textView闪现的字符发生了改动:
入坑攻略HTML
-
java.io.FileNotFoundExceptioappearancen: activity_main.xhtml网页制造ml xml布局文件名需加前缀”assets/“
-
java.io.FileNotFoundhtml代码Exception: Corrupt XML binary file xml布局文件需求放入编译后的xml,假如仅仅一般的xml文件,则不需求
-
在xml中对子V源码精灵iew设置tag,经过ViewGroup的findViewWithTag(tag)办法即可获取到子View
-
运用html网页 “file:html标签特点大全///android_asset/$filename” filename为assets目录下的文件途径
东西类源码:
packjavascriptage com.coding.am_demo
import android.content.Context
import androjavaeeid.content.res.AssetManager
import android.graphicjava初学sapple.Bitmap
import andappreciateroid.graphics.BitmapFactory
import android.view.LayoutInflater
imphtmlort android.viejava语言w.View
import java.io.IOException
/**
* @author: Coding.He
* @date: 2html020/10/9
* @emil: 229101253@qq.com
* @des:获取assets目录下资源的东西类
*/
object AssetsTools {
private latehtml网页制造init源码之家 var am: AssetManager
private lateinit var appCtx: Context
/**
* 初始化AssetsTools,运用前有必要初始化
* */
fun inhtml网页制造it(ctx: Context) {
this.a源码编辑器ppappstoreCtx = ctx.applicationContext
am = ctx.applicatiohtml是什么意思nContejavaapi中文在线看xt.assets
}
/**
*html标签特点大全 获取assets目录下的xml布局
* 需求以.xml完毕
* */
@Throws(IOException::class)
fun getView(filename: Strinjavaapi中文在线看g): View? {
if (源码之家!filename.endsWith(".xml"))
return null
val name = when {
filename.startsWith("assets/") -> filename
else -android手机> "assets/$filename"
}
return LayoutInflater.from(appCtx).inflate(am.openXmlResourceParser(name), null)
}源码之家
/**
* 获取assets目录下的图片资源
* */
fun getandroid是什么手机牌子Bitmapandroid比赛专用包(filename: Shtml标签tring)java初学: Bitmap? {
var bitmap: Bitmaphtml简单网页代码? = null
try {
val ins = am.open(filename)
ins.use {
bitmap = BitmapFactory.decodeStream(ins)
}
} catch (e: IOExappearanceception) {
e.printStackTraJavace()
}android/yunos
return bitmap
}
/**
* 获取assets目录下的html途径
*源码 */
fun getHtml源码之家Url(fhtml文件怎样打开ilename: String):String{
return "file:///android_asset/$filenamhtml个人网页完好代码e"
}
}
demo项目地址