在unity中开发游戏时,难免会用到一些android的原生功能,另外在调用第三方sdk的过程中也会经常有类似的需求。但是在unity中调用android jar包中的布局文件或者图片等资源时,由于unity的重新打包,生成了新的R文件,导致原来jar包中通过R读取的资源文件都找不到。所以就必须修改读取方式来达到正常读取的需求。
1、创建一个自定义控件。
1)布局文件如下:
如图:
2)代码中读取布局文件,获得控件实例。
public class MyView extendsLinearLayout{privateImageView img;privateEditText edt;publicMyView(Context context) {super(context);//TODO Auto-generated constructor stub
}publicMyView(Context context, AttributeSet attrs) {super(context, attrs);//TODO Auto-generated constructor stub
LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);/**此种做法是无效的,空引用
View v = inflater.inflate(R.layout.mybtnlayout, null);
img = (ImageView)v.findViewById(R.id.imageView1);
edt = (EditText)v.findViewById(R.id.editText1);*/
/***有效的做法*/View v= inflater.inflate(MResource.getIdByName(context, "layout", "mybtnlayout"), this);
img=(ImageView)v.findViewById(MResource.getIdByName(context, "id", "imageView1"));
edt=(EditText)v.findViewById(MResource.getIdByName(context, "id", "editText1"));
}/*** 设置图片资源*/
public void setImageResource(intresId) {
img.setImageResource(resId);
}/*** 设置显示的文字*/
public voidsetTextViewText(String text) {
edt.setText(text);
}
}
3)重要:资源文件读取方式:
packagecom.example.myview;importjava.io.IOException;importjava.io.InputStream;importandroid.content.Context;importandroid.content.res.AssetManager;importandroid.graphics.drawable.Drawable;public classMResource {/*** 根据资源的名字获取其ID值
*
*@authormining
**/
public static intgetIdByName(Context context, String className, String name) {//此处的包名不能通过context获取,因为在unity中这样获取到的是unity额外设定的包名,不是jar包里面的包名
String packageName = "com.example.updateg