編輯:關於android開發
在一個Android應用程序中,用戶界面通過View和ViewGroup對象構建。所有View的子類成為”Widget”,所有ViewGroup的子類成為”Layout”。View和ViewGroup之間采用了組合設計模式。ViewGroup作為布局容器類的最上層,布局容器裡面又可以有View和ViewGroup。
ViewGroup和View的組合關系如下圖:
ViewGroup和View的繼承關系如下圖:
當啟動Activity的時候,有一個setContentView()方法,Activity其實不是顯示視圖,實際上Activity調用了PhoneWindow的setContentView()方法,然後加載視圖,將視圖放到這個Window上,而Activity其實構造的時候初始化的是Window(PhoneWindow),Activity其實是個控制單元,即可視的人機交互界面(Activity其實不是顯示視圖,View才是真正的顯示視圖)。
每個Activity包含一個PhoneWindow對象,PhoneWindow設置DecorView為應用窗口的根視圖,所有的UI部件都是放在DecorView中。在裡面就是熟悉的TitleView和ContentView,平時使用的setContentView()就是設置的ContentView。
從用戶角度來看,Android是個多窗口的操作系統,不同尺寸的窗口區域根據尺寸,位置,z-order及是否透明等參數 疊加起來一起並最終呈現給用戶。這些窗口既可以是來自一個應用,也可以來自與多個應用,這些窗口既可以顯示在一個平面,也可以是不同的平面。總而言之,窗 口是有層次的顯示區域,每個窗口在底層最終體現為一個個的矩形Buffer, 這些Buffer經過計算合成為一個新的Buffer,最終交付Display系統進行顯示。
Activity,PhoneWiondow,DecorView的關系如下圖:
位於 /frameworks/base/core/java/android/view/Window.java。該類是一個抽象類,提供了繪制窗口的一組通用API。可以將之理解為一個載體,各種View在這個載體上顯示。
位於/frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindow.java。該類繼承於Window類,是Window類的具體實現,即我們可以通過該類具體去繪制窗口。並且,該類內部包含了一個DecorView對象,該DectorView對象是所有應用窗口(Activity界面)的根View。 簡而言之,PhoneWindow類是把一個FrameLayout類即DecorView對象進行一定的包裝,將它作為應用窗口的根View,並提供一組通用的窗口操作接口。
該類是PhoneWindow類的內部類。該類是一個FrameLayout的子類,並且是PhoneWindow的子類,該類就是對普通的FrameLayout進行功能的擴展,更確切點可以說是修飾(Decor的英文全稱是Decoration,即“修飾”的意思),比如說添加TitleBar(標題欄),以及TitleBar上的滾動條等 。最重要的一點是,它是所有應用窗口的根View 。
打個比喻:
Activity是一個工人,它來控制Window;Window是一面顯示屏,用來顯示信息;View就是要顯示在顯示屏上的信息,這些View都是層層重疊在一起(通過infalte()和addView())放到Window顯示屏上的。而LayoutInfalter就是用來生成View的一個工具,XML布局文件就是用來生成View的原料
android 實現漫天飛舞雪花以及下雨天的效果 前言: 這個效果實現的原作者是國外一位大神。我在其基礎上測試,以及在代碼上加了不少注釋,以及局部修改。後面我有根據漫
Android Studio實現APK的更新、下載、安裝,androidapk先不講那麼多看效果圖: 下面來講解一些更新CODE,原理大家都知道,不廢話,直接上代碼。
運用安卓CreateOptionsMenu和onCreateContextMenu菜單,模擬微信聊天界面長按彈出菜單選項。,oncreateoptionsmenu 1
Android Studio+WebApi(一)屬於我們自己的App,androidwebapi AndroidStudio(以後都簡稱AS),作為google的親兒子