Android的LinearLayout中orientation默認值為什么是HORIZONTAL


在一個偶然(閑着無聊)的過程中,突然非常好奇為什么LinearLayout在不指定排列方向為垂直(VERTICAL)時就得是水平方向(HORIZONTAL)排列的。產生這個疑問的時候腦子里蹦出來的第一個回答就是:肯定是LinearLayout在實例化過程中指定了它的默認值為HORIZONTAL。反正這會閑着也是閑着,不墨跡,看源碼!!!

    在LinearLayout的源碼(Android4.4)中找到setOrientation()方法的實現如下圖所示。

圖1 setOrientation的實現

 

嗯,夠簡單粗暴,代碼就該這樣寫!在LinearLayout中關於元素排列方向,就只是用一個int型的變量來表示而已。

圖2 表示元素排列方向的變量定義

 

接下來為了驗證自己之前的猜想:在LinearLayout實例化過程中設置了它的默認排列方向為水平方向。於是開始搜索LinearLayout中關於mOrientation變量的賦值操作。

圖3 LinearLayout中mOrientation的hits

 

發現出了在1683行中在setOrientation()方法中有一次賦值操作外,就不再有任何的其它賦值操作了。LinearLayout在實例化過程中並沒有去指定元素排列方向為HORIZONTAL啊,那它是如何保證默認值為HORIZONTAL的?等等,mOrientation是int型變量,全局int型變量默認值是0的。我們去看看HORIZONTAL與VERTICAL靜態變量的本質是什么。

圖4 HORIZONTAL與VERTICAL的定義

 

果不其然。LinearLayout在實例化過程中根本不需要顯示地去指定它的元素排列方向為水平。 在LinearLayout中元素水平排列是它與生俱來的特性。

    這個小知識點雖然簡單到不能算是知識點。但是我卻實實在在地被震撼到了。因為在這里,我見到了一個“優雅的程序設計”活生生的例子。只要我們的程序在編寫之初能有一個好的“設計藍圖”確實是能幫我們省卻不少工作量的,同時還能提升他人的閱讀體驗,讓閱讀者對程序設計者感到佩服。

    在我個人接受的關於面向對象編程的傳統教育中,都是不太提倡使用整型來做一些常量啊或其它標識類型的定義的,因為它不好管理,也不太直觀。在這個地方,如果換成我來寫的話,我有可能會將HORIZONTAL與VERTICAL設計成枚舉類型來定義。如此一來的話,在LinearLayout實例化過程中可能就不得不要顯示地指定mOrientation變量的值為HORIZONTAL了,為此就多了至少一步的工作量了。

    個人感覺,知識點這種東西,不應該去給它打上“過時”或是“潮流”的標簽。那些被我們打上“過時”的標簽的代碼設計方式,它只是在當下的環境中,用的比較少或是有更好的替代品而已。你不應該也不能將它“打入冷宮”,只要你記得它,它總是有一天能給你幫上忙的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM