专栏首页懒人开发鸿洋AutoLayout代码分析(二):获取Manifest中的值

鸿洋AutoLayout代码分析(二):获取Manifest中的值


简单查找

从AndroidManifest.xml中去取值,自己觉得应该和 PackageManager 或 Manifest 有关 (Manifest 简单是一个容器,存储和读写键值对用的, PackageManager 是抽象类,自己还没有了解过对应的实现)

因为上一节有提到过唯一的Activity,AutoLayoutActivity 我们 写一个引用 PackageManager pm, 找一下对应的 useages 使用

Paste_Image.png

我们可以找到对应的地方 也就是 AutoLayoutConifg 类的, getMetaData(Context context) 私有方法 (AutoLayoutConifg 拼写错位了, 应该是 大神写的比较急, 按快了造成的)

Paste_Image.png


AutoLayoutConifg 类

(AutoLayoutConifg 拼写错位了, 应该是 大神写的比较急, 按快了造成的) 我们先一起看一下大体结构 在android studio中的左侧,点击 Structure 点击 【P】 和 【锁】 (具体含有如果不清楚,可以参考 http://www.jianshu.com/p/739c8414109d

Paste_Image.png

再参考类的前面部分

Paste_Image.png

除了那个boolean 的属性 我们可以大体看见 4个get方法,其实就是 获取对应的 4个属性值 也就是对应的屏幕宽高, 设计的宽高

再看对应的静态对象,私有构造,instance方法 我们可以知道是对应的 饿汉单例

去掉先说的 ,暂时不考虑的 useDeviceSize() 方法以外 还有 init(Context context) , getMetaData(Context context),checkParams() 这3个方法


其他3个方法 checkParams()

    public void checkParams() {
        if (mDesignHeight <= 0 || mDesignWidth <= 0) {
            throw new RuntimeException(
                    "you must set " + KEY_DESIGN_WIDTH + " and " + KEY_DESIGN_HEIGHT + "  in your manifest file.");
        }
    }

我们可以知道是对应的 抛异常方法, 也就是 如果 mDesignHeight <= 0 || mDesignWidth <= 0 主动抛异常

init(Context context)

    public void init(Context context) {
        getMetaData(context);

        int[] screenSize = ScreenUtils.getScreenSize(context, useDeviceSize);
        mScreenWidth = screenSize[0];
        mScreenHeight = screenSize[1];
        L.e(" screenWidth =" + mScreenWidth + " ,screenHeight = " + mScreenHeight);
    }

调用getMetaData(context);后 依赖 ScreenUtils类, 获取 mScreenWidth 和 mScreenHeight。 并且赋值

getMetaData(Context context)

    private void getMetaData(Context context) {
        PackageManager packageManager = context.getPackageManager();
        ApplicationInfo applicationInfo;
        try {
            applicationInfo = packageManager.getApplicationInfo(context
                    .getPackageName(), PackageManager.GET_META_DATA);
            if (applicationInfo != null && applicationInfo.metaData != null) {
                mDesignWidth = (int) applicationInfo.metaData.get(KEY_DESIGN_WIDTH);
                mDesignHeight = (int) applicationInfo.metaData.get(KEY_DESIGN_HEIGHT);
            }
        } catch (PackageManager.NameNotFoundException e) {
            throw new RuntimeException(
                    "you must set " + KEY_DESIGN_WIDTH + " and " + KEY_DESIGN_HEIGHT + "  in your manifest file.", e);
        }

        L.e(" designWidth =" + mDesignWidth + " , designHeight = " + mDesignHeight);
    }

依赖 PackageManager 和 ApplicationInfo 这2个类去获得 AndroidManifest.xml文件中,对应的 meta-data 值

Paste_Image.png

当然,如果没有配置,对应的try... catch 可以 主动抛异常,提醒配置

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • (10.4)James Stewart Calculus 5th Edition:Areas and Lengths in Polar Coordinates

    极坐标系中的面积和长度 (这里看见 Coordinates ,就想到了 CoordiateLayout _ ) 我们简单要求一个圆的部分面积

    dodo_lihao
  • (8.1)James Stewart Calculus 5th Edition:Arc Length

    半立方抛物线?? 这名词.... 也就是求一个函数,2个点之间的弧长 这2个点,我们知道对应的x取值范围 可以得到对应的表达式为

    dodo_lihao
  • (11)James Stewart Calculus 5th Edition:Infinite Sequences and Series

    哎,其实很多一样的东西 在不同学科,翻译成中文,都翻译得变样了 如果从小都学英文课本 该是多么好的一件事情啊!!

    dodo_lihao
  • 堆栈溢出渗透实战-part2

    昨天完成了Stack Overflows for Beginners: 1靶机的第一个目标,还是比较简单的,今天来继续完成第二个目标。

    光明SAMA
  • mysql 获取最近6个月的日期的 sql 实例

    一个会写诗的程序员
  • Ajax jsonp 跨域请求实例

    跨域请求 JSONP的缺点则是:它只支持GET请求而不支持POST等其它类型的HTTP请求;它只支持跨域HTTP请求这种情况,不能解决不同域的两个页面之间如何进...

    纯粹是糖
  • MIT研发“读心机”:不开口也能对话,人生开挂全靠它

    麻省理工学院(MIT)的研究人员最近发明了一个神奇的工具,在用户说话张嘴说话前,就能识别用户要说什么。有了它,感觉能在生活中开挂。

    量子位
  • 每周一脚本:批量对多个文件增加前缀

    最近从设计师那里get了超多的图,结果都是1.png,2.png这样的文件名,自己还需要将这些文件变成可读的文件名,不想一个一个得修改,于是就写了一个简单的脚本...

    技术小黑屋
  • 如何高效管理B端客户反馈?

    ? 来源|作者:李宽wideplum ---- 在许多组织中,产品经理有源源不断的任务来自面向客户的团队。功能请求,bug 修复——所有这些都是紧急的。要想在...

    腾讯SaaS加速器
  • 记录一个未知的问题

    Visual Studio一启用应用程序就提示“操作无法完成,因为该文件已在xx.exe中打开”,但是我启动的就是xx.exe啊

    meteoric

扫码关注云+社区

领取腾讯云代金券