安卓动态查找资源ID与布局

最近三年一直在做游戏SDK开发,当然也会开发自己的SDK,很多人遇到了把资源逻辑写在SDK里面然后封装成jar包,给别人用的时候,别人应用jar包,引入你写的相关的API,却提示找不到R文件。

那是因为你在SDK布局还有引用R的时候都是R.id.xx或者R.layout.xx。在APP里面写没所谓,我以前也是做APP的,也不用动态引用资源ID什么的。但是当你写SDK,用到了资源ID一定要动态引用。因为这个资源ID是在你目前工程环境下,你打出jar包给别人引用就算资源一个不落的拷贝过去,但是资源引用的环境变了。

下面动态查找资源layout id示例代码:

int id = context.getResources().getIdentifier("yingsdk_game_login_fixpwd_phone_dialog", "layout", context.getPackageName());
        if (id == 0) {
            return;
        }
        final View view = View.inflate(context, id, null);
        setContentView(view);

动态查找资源控件 id示例代码:

button_close = (Button) findViewById("yingsdk_dialog_btn_close");

public View findViewById(String resName) {
        return super.findViewById(getContext().getResources().getIdentifier(resName, "id", getContext().getPackageName()));
    }

注意findViewById(String resName)是封装的一个方法,而不是直接调用的系统的

这样就完全可以避免R文件找不到的问题了,市面上的一些游戏SDK,以及第三方SDK用的不出问题,那完全是别人都是用这种方式处理好了的(我说的不是在AS以build gradle形式)而是以libs和res资源文件依赖的方式,例如facebook和谷歌你直接用AS build引用没问题,如果你业务需求需要用eclipse接呢?或者是以jar还有资源文件接呢?如果不用脚本做处理,直接引用那就会报错的。当然如果有更好的方法,也可以探讨哇。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,860评论 0 17
  • Day1: 在代码中通过R.string.hello_world可以获得该字符串的引用; 在XML中通过@stri...
    冰凝雪国阅读 5,356评论 0 5
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,882评论 1 32
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 7,851评论 0 3
  • day01 英语****Generation 一代人;代(约30年),时代icon 图标Libraries:...
    lengol阅读 6,057评论 0 50

友情链接更多精彩内容