在activity的oncreate裡我們設定內容的時候需要呼叫setcontentview,那麼setcontentview幹了什麼呢?
public void setcontentview(int layoutresid)
從方法裡看出來 1.設定內容 2.初始化actionbar
在initactionbar();裡:
private void initactionbar()
mactionbar = new actionbarimpl(this);
mactionbar.setdefaultdisplayhomeasupenabled(menabledefaultactionbarup);
mwindow.setdefaulticon(mactivityinfo.geticonresource());
mwindow.setdefaultlogo(mactivityinfo.getlogoresource());
}
我們可以看到 為什麼如果我們要呼叫requestfeature,就必須要在setcontent之前了。
以上題外話,我們知道執行完setcontentview之後,android系統會給我們新增一層id為 content的framelayout,於是我就想知道,螢幕上除了顯示的view還有什麼呢?我打算一**竟:
我知道的探索的方法有兩種:
1.利用sdk/tools/hierarchyviewer.bat 檢視 比較簡單 不過要求是手機已經root。
2.**方式,這個比較簡單 但是看到的東西沒有用hierarchyviewer看得多。
1.首先 setcontentview(r.layout.activity_main); 這個view裡有乙個rl (不知道放不同的view會不會有影響)
找到這個view relativelayout rl = (relativelayout) findviewbyid(r.id.rl);
然後通過這個view的 getparent來獲得他的父view
viewparent vp = rl.getparent();
通過除錯 發現它是乙個 framelayout
同理繼續:
viewparent vvp = vp.getparent();
發現這個vvp是乙個叫actionbaroverlaylayout的乙個viewgroup,
不僅如此,它除了framelayout之外還有兩個子view,乙個linearlayout,乙個actionbarcontainer
這個actionbarcontainer extends nineframe 而nineframe extends framelayout 說來actionbarcontainer算是個framelayout;
我覺得這個linearlayout是用來放頂部的actionbar的。
再繼續會發現,再上面是乙個 phonewindow$decorview,而這裡也到頂了,再上去獲得的是null了。
至於為什麼叫phonewindow$decorview,我只知道decorview是被windowmanager新增在window裡的。
phonewindow是乙個android的基本視窗系統,每個activity都會有乙個,是activity與view交接的介面。
decorview據說是個framelayout...
截乙個hierarchyviewer看的圖:
探索與發現,我們在路上
從50年代到接近90年代末,這一時期都是廠家的年代,以廠家為主導。什麼意思呢?就拿泡沫時期來說,sun的伺服器供不應求,要買伺服器幾乎是不計成本的,只要拿得到裝置已經是很不錯了。在那個時代,廠家擁有絕對地主動權,由於需求大過 廠商可以決定把貨物優先提供給他們比較重視的客戶。在這種時候下,客戶顯然有求...
探索與發現,我們在路上
從50年代到接近90年代末,這一時期都是廠家的年代,以廠家為主導。什麼意思呢?就拿泡沫時期來說,sun的伺服器供不應求,要買伺服器幾乎是不計成本的,只要拿得到裝置已經是很不錯了。在那個時代,廠家擁有絕對地主動權,由於需求大過 廠商可以決定把貨物優先提供給他們比較重視的客戶。在這種時候下,客戶顯然有求...
flex布局的探索
flex布局方案已經是前端技術棧家家互曉的網頁布局方案,它為盒狀模型提供最大的靈活性,意為 彈性布局 有幸讀了阮一峰老師的 flex布局教程 語法篇,flex布局教程 例項篇 並加以研究,受益良多,為我平時網頁布局提供了極大的便利性。flex是一維的東西,所以說它只能控制乙個方向,用座標系來表示就是...