android中layout、drawable及styles的xml文件加载探索
??????? 最近搞一個(gè)SDK項(xiàng)目,既然提供給用戶那么就不能太復(fù)雜。而android如果不用xml就會(huì)很復(fù)雜,比如布局,那么怎么辦?
??????? 關(guān)于布局別人提供了一個(gè)方法,xml解析。具體做法將xml文件以數(shù)據(jù)文件的形式放在文件夾下,比如assets,用XmlPullParser解析xml文件,再用LayoutInterflater的inflate方法獲取到layout,這樣就可以在代碼中利用了。
??????? 后來又遇到了一個(gè)問題,其他的xml呢?自己的項(xiàng)目中要用到drawable和styles,這倆個(gè)怎么辦?
??????? 經(jīng)過查找發(fā)現(xiàn),drawable也是可以用解析的方式載入的,同樣用XmlPullParser解析xml文件,然后用Drawable的createFromXml方法來得到drawable,這樣就可以在代碼中使用了。
??????? 那么styles呢?樣式主題中很多都有對(duì)應(yīng)的方法,可以在代碼中直接設(shè)置,但是有些還是不知道怎么解決的。(也許有方法,作為菜鳥的我不知道。。。)
??????? 比如android:backgroundDimEnabled,窗口之外依然是半透明的,這樣很多效果就不好看,就必須設(shè)置這個(gè)android:backgroundDimEnabled。但又不能使用xml文件,最終還是在網(wǎng)上找到了解決方法window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)和window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND),看來還要多研究下api,不過本人外語水平不咋地,所以看著頭大。同時(shí)也有dimAmount的相關(guān)方法(設(shè)置背景透明度)
??????? WindowManager.LayoutParams lp=getWindow().getAttributes(); lp.alpha=1.0f; getWindow().setAttributes(lp); <br/>
??????? 但是在自己研究的過程中發(fā)現(xiàn)了一個(gè)小問題,同時(shí)也深入的探索了一下,具體情況如下。
??????? 在styles中寫好了theme,在AndroidManifest.xml中載入沒有問題。但是在Activity中的onCreate方法中用setTheme載入,即使在stayles中設(shè)置了android:backgroundDimEnabled一樣沒有顯示效果。。。而且放在super.onCreate前后也是有差異的。
??????? 個(gè)人覺得造成這樣的原因是因?yàn)樵贏ndroidManifest.xml中設(shè)置theme后,這個(gè)樣式是在acticity的onCreate方法調(diào)用前就裝載了。那么到底是不是?繼續(xù)在源碼中探索吧。
??????? Activity的onCreate方法其實(shí)并不是真正的入口,真正的入口是ActivityThread,這就是所謂的主線程,這里有個(gè)main方法。Acticity就是在這個(gè)類里創(chuàng)建出來的運(yùn)行的,有關(guān)theme的代碼如下:
??????? int theme = r.activityInfo.getThemeResource(); if (theme != 0) { activity.setTheme(theme); } activity.mCalled = false; mInstrumentation.callActivityOnCreate(activity, r.state);
??????? 可以看的setTheme后有個(gè)callActivityOnCreate,這時(shí)才會(huì)調(diào)用Activity的onCreate方法。所以AndroidManifest.xml中載入沒有問題,在代碼中就出現(xiàn)了問題,個(gè)人認(rèn)為是有些設(shè)置是在onCreate時(shí)回復(fù)默認(rèn)了,具體原因就沒有繼續(xù)探索下去。
??????? 寫這個(gè)呢主要是記錄自己的一次學(xué)習(xí)過程,以后遇到類似的情況可以借鑒一下,因?yàn)樽约旱挠浶詫?shí)在太差了,免得之后再重新研究一遍。。。。
?
總結(jié)
以上是生活随笔為你收集整理的android中layout、drawable及styles的xml文件加载探索的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在Android应用外获取app的签名
- 下一篇: 一个循环、一个变量打印乘法口诀