日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LinearLayout具体解释一:LinearLayout的简单介绍

發布時間:2024/4/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LinearLayout具体解释一:LinearLayout的简单介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

LinearLayout,中文意思是線性布局。假設你是初學android的,肯定會非常困惑“啥叫布局”,啥又叫“線性布局”呢。

有的時候,我嘗試用官方的語言去解釋,但結果總是讓人非常懊惱。所以我僅僅能跟大家通俗的說“LinearLayout”就是一個View,即視圖,它跟Buttonbutton,Label標簽一樣,有自己的屬性,比方說,高度,寬度,背景色等等。那么跟Buttonbutton,Label標簽有啥差別呢。事實上也非常easy,就是這個LinearLayout他比其它的button之類的控件高端的地方在于,它本身又能夠作為一個視圖容器,用于放置像Button以及Layout之類的控件,而且他的子控件都是以“線性”方式布局的。背景交代完成,大家有疑問記得再問我哦!

然后,我們開始技術一點的,從代碼層次來說。

首先我們看LinearLayout的類繼承圖表



能夠發現,其繼承自ViewGroup,從名字就不難看出,ViewGroup是視圖組的意思。它能夠容納其它控件(記住,視圖也是控件的一種),因此LinearLayout能放置其它子控件的說法也就有了根據。

然后我們解釋他為什么是個視圖,而且具體的介紹一下。這個非常重要哦,還是那句話,打蛇要打七寸,做事情要做要害,看東西要看本質。LinearLayout的本質,也就是他的最上層的類,事實上是View類(當然那個object就不多說了,再說我打你!)。


既然其父類的本質是view,那我們僅僅須要好好分析一下view就可以:

這個View類說來就話長了,但我們又不得不說,要說呢,就得說的徹底,要讓大家看得一清二楚,明明確白。所以我們就從源碼角度來看一個view是怎樣被載入的吧。

假設大家不知道怎么下載android的源碼,或者說懶得去下載(由于源碼確實比較大,大概有10G)的話,教大家幾個取巧的辦法:

1.直接在google中輸入“android view.java”就可以。這樣的方法成功率很高,一般android的比較重要的類都能搜到。

2.給大家提供一個人家用于放源代碼的的git:git@gitorious.org:rowboat/frameworks-base.git 大家自己去clone一下。(什么!你Y的竟然連git都不會用!服了,好吧,請繼續往下看)。

3登錄到這里。這是2里面提供的那個git的網頁地址,在這里搜索對應要查找的類就能夠查找android的源碼了。


從頭說起吧,一般android啟動的是AndroidManifest.xml中帶有

<intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter>
這種activity。然后去調用該activity中的

public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.frame_content);}
方法。當中setContentView是把相應的Layout相應的xml解析成view并顯示在屏幕上的方法,也就是以上代碼中的R.layout.frame_content。

因為activity.java中的代碼量太長,我這邊就貼個鏈接,大家看一下:Activity.java

能夠發如今1650行的地方有這么一句話:

public void setContentView(int layoutResID) {getWindow().setContentView(layoutResID);}然后我們跳轉到738行

public Window getWindow() {return mWindow;}
發現這個setContentView事實上調用的是mWindow的setContentView,mWindow非常easy理解,就是 member window嘛,以下我們繼續往window里找。
有關window.java的源碼大家能夠在這里找到。

非常傷心的是,window類是個抽象類

public abstract class Window {

,他僅僅是定義了這些方法

public abstract void setContentView(int layoutResID);public abstract void setContentView(View view);public abstract void setContentView(View view, ViewGroup.LayoutParams params);
而沒有實現它,那真正實現的地方在哪里呢,請猛戳這里PhoneWindow.java?。可愛的你肯定在疑惑,我砸知道的呢,難道我有“第三僅僅眼”!靠,事實上這個說出來你就會沮喪了,四個字:官方文檔。詳見:


好,以下,我們開始看PhoneWindow.java?的源代碼,直接看函數setContentView:

@Overridepublic void setContentView(int layoutResID) {if (mContentParent == null) {installDecor();} else {mContentParent.removeAllViews();}mLayoutInflater.inflate(layoutResID, mContentParent);final Callback cb = getCallback();if (cb != null) {cb.onContentChanged();}}
能夠發現,事實上它又調用了mLayoutInflater的inflate方法。我,草!!!媽的,搞這么一層又一層干甚。不寫了,且聽下回分解。



轉載于:https://www.cnblogs.com/mfrbuaa/p/3995177.html

總結

以上是生活随笔為你收集整理的LinearLayout具体解释一:LinearLayout的简单介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。