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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android让一个控件跟上面控件对其,学个明白--Android控件架构

發布時間:2023/12/1 Android 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android让一个控件跟上面控件对其,学个明白--Android控件架构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android控件架構

1.什么是View?

View是Android中所有控件的基類。View是界面層的控件的一種抽象,它代表了一個控件。在Android中每個控件都會在界面中占得一塊矩形的區域。在Android中控件被分為兩類:View和ViewGroup。ViewGroup控件作為父控件可以包含多個View控件,并管理它包含的View控件。通過ViewGroup,整個界面上的控件形成了一個樹形結構,這幾件事我們常說的控件樹,上層控件負責下層子控件的測量和繪制,并傳遞交互事件。

2.所謂的樹結構

ViewGroup,顧名思義,它是控件組。但是,在Android的設計中,ViewGroup也是繼承自View的,這也就意味著View本身就是可以是單個控件也可以是由多個控件組成的一組控件。通過這種關系就形成了View樹的結構。-- Android開發藝術探索

3.findViewById()是如何找到元素的?

我們使用findViewById()方法,就是在控件樹種以樹的深度優先遍歷來查找對應元素。在每個控件樹的頂部都有一個ViewParent對象,它就是整棵樹的控制核心,所有的交互管理事件都由它來統一調度和分配,從而可以對整個視圖進行整體控制。

4.View樹結構,和UI界面架構圖

圖來自《Android群英傳》

View樹結構&UI界面架構圖.png

5.剖析UI界面架構圖

正如圖3.2所示,每個Activity都包含一個Window對象,在Android中Window對象通過由PhoneWindow 來實現。

PhoneWindow將一個DecorView設置為整個應用窗口的根View。

DecorView作為窗口界面的頂層視圖,封裝了一些窗口操作的通用方法。可以說,DecorView將要顯示的具體內容呈現在了PhoneWindow上,這里面所有的View 監聽事件,都通過WindowManagerService 來接收,并通過Activity對象來回調相應的onClickListener。

在顯示上,一般情況下DecorView內部會包含一個垂直方向的LinearLayout,將屏幕分成兩個部分,一個是TitleView,一個是ContentView,現在知道為啥子我們設置布局的時候是setContentView(R.layout.activity_main) 了吧。 這個我們非常親密的布局——ContentView,它是一個ID為android.R.id.content的FrameLayout,我們的布局文件layout.activity_main就是設置在這樣一個FrameLayout里面的。

知道了上面的這些之后,介紹一下標準視圖樹。

6.almost標準視圖樹

為什么是almost標準視圖樹,因為Android版本對AndroidUI會變動啊,可能某個時候這就不適用了。

almost標準視圖樹.png

上面的就是最常用的布局,上面TitleBar/ActionBar(這里先不說ToolBar的事),下面Content,(在TitleBar的情況下)如果用戶使用requestWindowFeature(Window.FEATURE_NO_TITLE)設置全屏,那么就只剩下Content了。并且requestWindowFeature(Window.FEATURE_NO_TITLE)要早setContentView之前調用,為啥?因為Content要占用TitleBar的位置。

而在代碼中,當程序在onCreate()中調用setContentView()方法后,ActivityManagerService會回調onResume()方法,此時系統才會把整個DecorView添加到PhoneWindow中,并讓內容顯示出來,從而完成界面的繪制。

8.補充知識:TitleBar和ActionBar的區別

因為之前的內容說道了TitleBar,TitleBar是個老舊的東西,所以這兩年才學Android的朋友可能沒聽到這玩意。下面補充一下TitleBar的常用的問題。

主要是說說隱藏actionBar和titileBar的問題

隱藏ActionBar和TitleBar方式很多,想了解的看這位網友寫的blog

先來看個例子:

public class MainActivity extends AppCompatActivity {

Button mBtn;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.activity_main);

}

}

運行之后發現,上面的"TitleBar"沒有消失,是不是很生氣,是不是想罵我騙子??凸俨豢梢?#xff0c;您息怒。聽我娓娓道來。

我們來看看ActionBar來自何方。

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

getSupportActionBar().hide();

// requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.activity_main);

}

// 我們command+點擊 getSupportActionBar(),發現這個方法是AppCompatActivity類中的。

// 同樣的方式你會發現requestWindowFeature()是Activity類的。

// 所以,現在你是不是該明白點什么。

下面說TitleBar與ActionBar的區別:

i. 兩者activity繼承的類不一樣,actionbar繼承AppCompatActivity, titlebar繼承Activity,如果搞混了繼承的類的話,會導致上述隱藏相應控件失效。

ii. TitleBar,也就是標題欄,它緊挨在狀態欄的下面,正常情況下它的布局和主題樣式都是使用系統定義好的,且默認情況下只顯示圖標和文本。

iii. ActionBar,也就是操作欄,它是Android3.0以后引入SDK的,通過它去取代之前標題欄,它和標題欄一樣緊挨狀態欄的下面,它可以放入按鈕,或下拉式的按鈕.可以有文字,logo等信息.還可以設置返回按鈕等信息。

參考資料:

developer.android.com

Android群英傳

Android開發藝術探索

下一篇文章準備寫Android世界的坐標系

總結

以上是生活随笔為你收集整理的android让一个控件跟上面控件对其,学个明白--Android控件架构的全部內容,希望文章能夠幫你解決所遇到的問題。

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