對于view的重新理解

做這個AA項目時雇初,本著盡可能將不懂得東西搞明白的想法域庇,我對于view有了更深的理解字币,下面是我打的一個比方蕾哟。
假設activity是工人一忱,那么這個工人開始工作時通過attach()方法啟動了一個phoneWindow對象,這個對象就是一個窗戶谭确,然后有了窗戶就應該裝
一塊玻璃帘营,而installDecor()方法就是得到玻璃的,這是一個DecorView逐哈,在系統(tǒng)的視圖樹中芬迄,這是根視圖,下面就是一個linearLayout昂秃,然后在
這個LinearLayout下面是兩個FrameLayout禀梳,其中一個下面直接放入一個TextView,這個TextView用于顯示標題肠骆,另一個FrameLayout下面再接一個
LinearLayout算途,而這個LinearLayout就是我們真正開始放入內容的布局。然后有了窗戶后我們應該貼窗花蚀腿,因為這樣才會顯得有內容嘴瓤,那么,什么
是窗花呢?窗花就是各種控件廓脆,也就是在布局xml中定義的各種控件畏浆,當然,有xml方式就有代碼的方式狞贱,大同小異刻获。那么如何將窗花貼到玻璃上
呢?這里需要說明瞎嬉,你將窗花貼到玻璃上蝎毡,并不是說直接貼在玻璃上,而是貼在一張紙上再貼在玻璃上氧枣,因為這樣方便管理(包括撤銷和添加的位
置等)沐兵,這一點很重要,這也就意味著便监,顯示出來的控件一定是貼在紙上的扎谎,不管是窗戶上原來的紙還是你新創(chuàng)建的紙,同時烧董,如果你要尋找到窗
花毁靶,可以通過findViewById()方法來尋找到,但是如果你要對窗花進行修改和使用逊移,那么這個窗花一定是要在紙上的预吆,而且你找到的窗花一定要是
這個紙上的窗花,也就是在findViewById()方法前加上view來指定是哪張紙胳泉,也就是說這張紙一定要加載出來拐叉,比如,一下代碼:

       ViewGroup  viewGroup1= (ViewGroup) LayoutInflater.from(this).inflate(R.layout.activity_main,null);          
        RelativeLayout r= (RelativeLayout) viewGroup1.findViewById(R.id.r);   
      Button b=new Button(this);   
    b.setText("b1");   
    r.addView(b);  
    setContentView(r);   

這個代碼是沒有問題的扇商,但是凤瘦,如果將第一行代碼刪了,變成:

  RelativeLayout r= (RelativeLayout) findViewById(R.id.r);  
    Button b=new Button(this);  
    b.setText("b1");  
    r.addView(b);  
    setContentView(r);  

那么案铺,就會報錯蔬芥,內容大概是調用addView(b)方法的對象是空的。
那么紙是什么呢?紙其實就是view红且,是通過LayoutInflaterinflate()方法生成的坝茎,同時這里還需要提一點涤姊,如果你想將一張紙上的窗花黏在另一
張紙上暇番,那么,你首先需要將這個窗花從原來的紙上撕下來思喊,然后再將這個窗花貼在另一張紙上壁酬,這里的撕就是原來紙調用removeView()方法,
然后黏在另一張紙上,就是另一張紙調用addview()方法舆乔,那么這樣能實現(xiàn)什么呢岳服?
1.動態(tài)的將布局呈現(xiàn)
2.將布局的一部分替換掉
3.實現(xiàn)類似側滑菜單的效果
這里還要提一點,因為窗口的大小是有限的希俩,所以可能你的紙上的控件沒有顯示完全吊宋,如果你將這個紙上邊的控件清除再調整紙的位置,或者直
接通過調整紙的位置將紙上邊的控件擠掉颜武,來達到讓這張紙完全顯示的結果璃搜,那么這意味著什么呢?
意味著可以通過這種方式實現(xiàn)側滑菜單的效果。
其實說到底鳞上,側滑菜單的效果的實現(xiàn)實際上就是實現(xiàn)將布局的一部分替換掉和動態(tài)呈現(xiàn)布局的功能这吻,要掌握替換布局和動態(tài)呈現(xiàn)布局的原理,并
且靈活運用篙议。比如實現(xiàn)側滑菜單就有幾種方式唾糯,不過原理都是一樣的,下面列舉一下我的兩種方式:
1.在主布局中就有側滑時需要的布局鬼贱,只是一開始不讓它呈現(xiàn)出來(設置高度等屬性)移怯,然后當點擊時呈現(xiàn)出來(往往是通過替換掉原來呈現(xiàn)出來的控件)
2.在主布局中沒有側滑時需要的布局,當點擊時讓它自己動態(tài)加載出來这难,然后貼在相應的位置的紙上芋酌。

同時需要注意一下,setcontentView()方法是將紙黏在玻璃上雁佳,那么這張紙是哪張紙呢脐帝?這張紙就是你傳入的參數(shù),比如下面兩種代碼的區(qū)別:

 super.onCreate(savedInstanceState);                       super.onCreate(savedInstanceState);  
RelativeLayout r= (RelativeLayout) findViewById(R.id.r);   RelativeLayout r= (RelativeLayout) findViewById(R.id.r);       
TextView t1= (TextView) r.findViewById(R.id.t);            TextView t1= (TextView) r.findViewById(R.id.t);  
t1.setText("t1");                                           t1.setText("t1")
b.setText("b1");                                              b.setText("b1");
r.addView(b);                                                r.addView(b);  
setContentView(r);                                            setContentView(R.layout.activity_main);

這兩代碼就是最后一行不同糖权,左邊的代碼顯示出來是一個內容為t1的TextView和B1的Button堵腹, 右邊的代碼顯示出來的是只有一個內容為hello world的TextView
這也就說明了顯示出來的內容就是你傳入的紙的內容,有人可能覺得這是廢話星澳,但是你寫代碼的時候可能就會搞混了疚顷,所以在這里提出來,一定要記住禁偎。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末腿堤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子如暖,更是在濱河造成了極大的恐慌笆檀,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盒至,死亡現(xiàn)場離奇詭異酗洒,居然都是意外死亡士修,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門樱衷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來棋嘲,“玉大人,你說我怎么就攤上這事矩桂》幸疲” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵侄榴,是天一觀的道長阔籽。 經(jīng)常有香客問我,道長牲蜀,這世上最難降的妖魔是什么笆制? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮涣达,結果婚禮上在辆,老公的妹妹穿的比我還像新娘。我一直安慰自己度苔,他們只是感情好匆篓,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著寇窑,像睡著了一般鸦概。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上甩骏,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天窗市,我揣著相機與錄音,去河邊找鬼饮笛。 笑死咨察,一個胖子當著我的面吹牛,可吹牛的內容都是我干的福青。 我是一名探鬼主播摄狱,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼无午!你這毒婦竟也來了媒役?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤宪迟,失蹤者是張志新(化名)和其女友劉穎酣衷,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體踩验,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡鸥诽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年兽泣,在試婚紗的時候發(fā)現(xiàn)自己被綠了负蚊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡雨饺,死狀恐怖袭异,靈堂內的尸體忽然破棺而出钠龙,到底是詐尸還是另有隱情,我是刑警寧澤御铃,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布碴里,位于F島的核電站,受9級特大地震影響上真,放射性物質發(fā)生泄漏咬腋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一睡互、第九天 我趴在偏房一處隱蔽的房頂上張望根竿。 院中可真熱鬧,春花似錦就珠、人聲如沸寇壳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽壳炎。三九已至,卻和暖如春逼侦,著一層夾襖步出監(jiān)牢的瞬間匿辩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工榛丢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留撒汉,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓涕滋,卻偏偏與公主長得像睬辐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子宾肺,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,133評論 25 707
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程溯饵,因...
    小菜c閱讀 6,419評論 0 17
  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫、插件锨用、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,103評論 4 62
  • 用文字記錄思想 用思想豐富文字 言者有心 聽著有意 心意相通則歡 心花意亂則樂
    創(chuàng)造快樂閱讀 138評論 0 0
  • 我一直都覺得自己還很小丰刊,還沒正式長大,可如今我的朋友都開始結婚生子了增拥,我才發(fā)現(xiàn)自己原來已經(jīng)21歲了啄巧,盡管我不想承認...
    Shelly的舊時光閱讀 188評論 0 0