簡(jiǎn)單查找
從AndroidManifest.xml中去取值,自己覺(jué)得應(yīng)該和 PackageManager 或 Manifest 有關(guān)
(Manifest 簡(jiǎn)單是一個(gè)容器魄懂,存儲(chǔ)和讀寫(xiě)鍵值對(duì)用的类浪, PackageManager 是抽象類,自己還沒(méi)有了解過(guò)對(duì)應(yīng)的實(shí)現(xiàn))
因?yàn)樯弦还?jié)有提到過(guò)唯一的Activity寇蚊,AutoLayoutActivity
我們 寫(xiě)一個(gè)引用 PackageManager pm折联,
找一下對(duì)應(yīng)的 useages 使用
我們可以找到對(duì)應(yīng)的地方
也就是 AutoLayoutConifg 類的颓屑, getMetaData(Context context) 私有方法
(AutoLayoutConifg 拼寫(xiě)錯(cuò)位了, 應(yīng)該是 大神寫(xiě)的比較急耿焊, 按快了造成的)
AutoLayoutConifg 類
(AutoLayoutConifg 拼寫(xiě)錯(cuò)位了揪惦, 應(yīng)該是 大神寫(xiě)的比較急, 按快了造成的)
我們先一起看一下大體結(jié)構(gòu)
在android studio中的左側(cè)罗侯,點(diǎn)擊 Structure
點(diǎn)擊 【P】 和 【鎖】
(具體含有如果不清楚器腋,可以參考 http://www.reibang.com/p/739c8414109d )
再參考類的前面部分
除了那個(gè)boolean 的屬性
我們可以大體看見(jiàn)
4個(gè)get方法,其實(shí)就是 獲取對(duì)應(yīng)的 4個(gè)屬性值
也就是對(duì)應(yīng)的屏幕寬高钩杰, 設(shè)計(jì)的寬高
再看對(duì)應(yīng)的靜態(tài)對(duì)象蒂培,私有構(gòu)造,instance方法
我們可以知道是對(duì)應(yīng)的 餓漢單例
去掉先說(shuō)的 榜苫,暫時(shí)不考慮的 useDeviceSize() 方法以外
還有 init(Context context) , getMetaData(Context context)护戳,checkParams()
這3個(gè)方法
其他3個(gè)方法
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.");
}
}
我們可以知道是對(duì)應(yīng)的 拋異常方法,
也就是 如果 mDesignHeight <= 0 || mDesignWidth <= 0
主動(dòng)拋異常
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);
}
調(diào)用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個(gè)類去獲得
AndroidManifest.xml文件中,對(duì)應(yīng)的 meta-data 值
當(dāng)然驹饺,如果沒(méi)有配置钳枕,對(duì)應(yīng)的try... catch 可以 主動(dòng)拋異常,提醒配置
下一篇我們可以了解鴻洋AutoLayout代碼分析(三):入口類分析