Android 四大控制元件,五大儲存,六大布局
四大元件分別為activity、service、content provider、broadcast receiver。
1、activity
(1)一個Activity通常就是一個單獨的螢幕(視窗)。
(2)Activity之間通過Intent進行通訊。
(3)android應用中每一個Activity都必須要在AndroidManifest.xml配置檔案中宣告,否則系統將不識別也不執行該Activity。
2、service
(1)service用於在後臺完成使用者指定的操作。service分為兩種:
(a)started
(b)bound(繫結):當應用程式元件呼叫bindService()方法繫結到服務時,服務處於bound狀態。
(2)startService()與bindService()區別:
(a)started service(啟動服務)是由其他元件呼叫startService()方法啟動的,這導致服務的onStartCommand()方法被呼叫。當服務是started狀態時,其生命週期與啟動它的元件無關,並且可以在後臺無限期執行,即使啟動服務的元件已經被銷燬。因此,服務需要在完成任務後呼叫stopSelf()
(b)使用bindService()方法啟用服務,呼叫者與服務繫結在了一起,呼叫者一旦退出,服務也就終止,大有“不求同時生,必須同時死”的特點。
(3)開發人員需要在應用程式配置檔案中宣告全部的service,使用<service></service>標籤。
(4)Service通常位於後臺執行,它一般不需要與使用者互動,因此Service元件沒有圖形使用者介面。Service元件需要繼承Service基類。Service元件通常用於為其他元件提供後臺服務或監控其他元件的執行狀態。
3
(1)android平臺提供了Content Provider使一個應用程式的指定資料集提供給其他應用程式。其他應用可以通過ContentResolver類從該內容提供者中獲取或存入資料。
(2)只有需要在多個應用程式間共享資料是才需要內容提供者。例如,通訊錄資料被多個應用程式使用,且必須儲存在一個內容提供者中。它的好處是統一資料訪問方式。
(3)ContentProvider實現資料共享。ContentProvider用於儲存和獲取資料,並使其對所有應用程式可見。這是不同應用程式間共享資料的唯一方式,因為android沒有提供所有應用共同訪問的公共儲存區。
(4)開發人員不會直接使用ContentProvider類的物件,大多數是通過ContentResolver物件實現對ContentProvider的操作。
(5)ContentProvider使用URI來唯一標識其資料集,這裡的URI以content://作為字首,表示該資料由ContentProvider來管理。
4、broadcast receiver
(1)你的應用可以使用它對外部事件進行過濾,只對感興趣的外部事件(如當電話呼入時,或者資料網路可用時)進行接收並做出響應。廣播接收器沒有使用者介面。然而,它們可以啟動一個activity或serice來響應它們收到的資訊,或者用NotificationManager來通知使用者。通知可以用很多種方式來吸引使用者的注意力,例如閃動背燈、震動、播放聲音等。一般來說是在狀態列上放一個持久的圖示,使用者可以開啟它並獲取訊息。
(2)廣播接收者的註冊有兩種方法,分別是程式動態註冊和AndroidManifest檔案中進行靜態註冊。
(3)動態註冊廣播接收器特點是當用來註冊的Activity關掉後,廣播也就失效了。靜態註冊無需擔憂廣播接收器是否被關閉,只要裝置是開啟狀態,廣播接收器也是開啟著的。也就是說哪怕app本身未啟動,該app訂閱的廣播在觸發時也會對它起作用。
二、android四大元件總結:
(1)4大元件的註冊
4大基本元件都需要註冊才能使用,每個Activity、service、Content Provider都需要在AndroidManifest檔案中進行配置。AndroidManifest檔案中未進行宣告的activity、服務以及內容提供者將不為系統所見,從而也就不可用。而broadcast receiver廣播接收者的註冊分靜態註冊(在AndroidManifest檔案中進行配置)和通過程式碼動態建立並以呼叫Context.registerReceiver()的方式註冊至系統。需要注意的是在AndroidManifest檔案中進行配置的廣播接收者會隨系統的啟動而一直處於活躍狀態,只要接收到感興趣的廣播就會觸發(即使程式未執行)。
(2)4大元件的啟用
內容提供者的啟用:當接收到ContentResolver發出的請求後,內容提供者被啟用。而其它三種元件activity、服務和廣播接收器被一種叫做intent的非同步訊息所啟用。
(3)4大元件的關閉
內容提供者僅在響應ContentResolver提出請求的時候啟用。而一個廣播接收器僅在響應廣播資訊的時候啟用。所以,沒有必要去顯式的關閉這些元件。Activity關閉:可以通過呼叫它的finish()方法來關閉一個activity。服務關閉:對於通過startService()方法啟動的服務要呼叫Context.stopService()方法關閉服務,使用bindService()方法啟動的服務要呼叫Contex.unbindService()方法關閉服務。
(4)android中的任務(activity棧)
(a)任務其實就是activity的棧,它由一個或多個Activity組成,共同完成一個完整的使用者體驗。棧底的是啟動整個任務的Activity,棧頂的是當前執行的使用者可以互動的Activity,當一個activity啟動另外一個的時候,新的activity就被壓入棧,併成為當前執行的activity。而前一個activity仍保持在棧之中。當用戶按下BACK鍵的時候,當前activity出棧,而前一個恢復為當前執行的activity。棧中儲存的其實是物件,棧中的Activity永遠不會重排,只會壓入或彈出。
(b)任務中的所有activity是作為一個整體進行移動的。整個的任務(即activity棧)可以移到前臺,或退至後臺。
(c)Android系統是一個多工(Multi-Task)的作業系統,可以在用手機聽音樂的同時,也執行其他多個程式。每多執行一個應用程式,就會多耗費一些系統記憶體,當同時執行的程式過多,或是關閉的程式沒有正確釋放掉記憶體,系統就會覺得越來越慢,甚至不穩定。為了解決這個問題,Android引入了一個新的機制,即生命週期(Life Cycle)。二.六大布局:
Android六大介面佈局方式:
宣告Android程式佈局有兩種方式:
1) 使用XML檔案描述介面佈局;
2) 在Java程式碼中通過呼叫方法進行控制。
我們既可以使用任何一種宣告介面佈局的方式,也可以同時使用兩種方式。
使用XML檔案宣告有以下3個特點:
- 1) 將程式的表現層和控制層分離;
- 2) 在後期修改使用者介面時,無須更改程式的源程式;
- 3) 可通過WYSIWYG視覺化工具直接看到所設計的使用者介面,有利於加快介面設計的過程。
建議儘量採用XML檔案宣告介面元素佈局。在程式執行時動態新增介面佈局會大大降低應用響應速度,但依然可以在必要時動態改變螢幕內容。
六大介面佈局方式包括: 線性佈局(LinearLayout)、框架佈局(FrameLayout)、表格佈局(TableLayout)、相對佈局(RelativeLayout)、絕對佈局(AbsoluteLayout)和網格佈局(GridLayout) 。
1. LinearLayout線性佈局
LinearLayout容器中的元件一個挨一個排列,通過控制android:orientation屬性,可控制各元件是橫向排列還是縱向排列。
LinearLayout的常用XML屬性及相關方法
XML屬性 | 相關方法 | 說明 |
---|---|---|
android:gravity | setGravity(int) | 設定佈局管理器內元件的對齊方式 |
android:orientation | setOrientation(int) | 設定佈局管理器內元件的排列方式,可以設定為horizontal、vertical兩個值之一 |
其中,gravity屬性支援top, left, right, center_vertical, fill_vertical, center_horizontal, fill_horizontal, center, fill, clip_vertical, clip_horizontal。也可以同時指定多種對齊方式的組合。
LinearLayout子元素支援的常用XML屬性及方法
XML屬性 | 說明 |
---|---|
android:layout_gravity | 指定該子元素在LinearLayout中的對齊方式 |
android:layout_weight | 指定子元素在LinearLayout中所佔的權重 |
2. TableLayout表格佈局
TableLayout繼承自Linearout,本質上仍然是線性佈局管理器。表格佈局採用行、列的形式來管理UI元件,並不需要明確地宣告包含多少行、多少列,而是通過新增TableRow、其他元件來控制表格的行數和列數。
每向TableLayout中新增一個TableRow就代表一行;
每向TableRow中新增一個一個子元件就表示一列;
如果直接向TableLayout新增元件,那麼該元件將直接佔用一行;
在表格佈局中,可以為單元格設定如下三種行為方式:
- Shrinkable:該列的所有單元格的寬度可以被收縮,以保證該表格能適應父容器的寬度;
- Strentchable:該列所有單元格的寬度可以被拉伸,以保證元件能完全填滿表格空餘空間;
- Collapsed:如果該列被設定為Collapsed,那麼該列的所有單元格會被隱藏;
TableLayout的常用XML屬性及方法
XML屬性 | 相關方法 | 說明 |
---|---|---|
android:collapseColumns | setColumns(int, boolean) | 設定需要被隱藏的列的序號,多個序號間用逗號分隔 |
android:shrinkColumns | setShrinkAllColumns(boolean) | 設定需要被收縮的列的序號 |
android:stretchColumns | setStretchAllColumns(boolean) | 設定允許被拉伸的列的序號 |
3. FrameLayout幀佈局
FrameLayout直接繼承自ViewGroup元件。幀佈局為每個加入其中的元件建立一個空白的區域(稱為一幀),每個子元件佔據一幀,這些幀會根據gravity屬性執行自動對齊。
FrameLayout的常用XM了屬性及方法
XML屬性 | 相關方法 | 說明 |
---|---|---|
android:foreground | setForeground(Drawable) | 設定該幀佈局容器的前景影象 |
android:foregroundGravity | setForeGroundGraity(int) | 定義繪製前景影象的gravity屬性 |
4. RelativeLayout相對佈局
RelativeLayout的XML屬性及相關方法說明
XML屬性 | 相關方法 | 說明 |
---|---|---|
android:gravity | setGravity(int) | |
android:ignoreGravity | setIgnoreGravity(int) | 設定哪個元件不受gravity屬性的影響 |
為了控制該佈局容器的各子元件的佈局分佈,RelativeLayout提供了一個內部類:RelativeLayout.LayoutParams。
RelativeLayout.LayoutParams裡只能設為boolean的XML屬性
XML屬性 | 說明 |
---|---|
android:layout_centerHorizontal | 設定該子元件是否位於佈局容器的水平居中 |
android:layout_centerVertical | |
android:layout_centerParent | |
android:layout_alignParentBottom | |
android:layout_alignParentLeft | |
android:layout_alignParentRight | |
android:layout_alignParentTop |
RelativeLayout.LayoutParams裡屬性值為其他UI元件ID的XML屬性
XML屬性 | 說明 |
---|---|
android:layout_toRightOf | 控制該子元件位於給出ID元件的右側 |
android:layout_toLeftOf | |
android:layout_above | |
android:layout_below | |
android:layout_alignTop | |
android:layout_alignBottom | |
android:layout_alignRight | |
android:layout_alignLeft |
5. Android 4.0新增的網格佈局GridLayout
GridLayout是Android4.0增加的網格佈局控制元件,與之前的TableLayout有些相似,它把整個容器劃分為rows × columns個網格,每個網格可以放置一個元件。效能及功能都要比tablelayout好,比如GridLayout佈局中的單元格可以跨越多行,而tablelayout則不行,此外,其渲染速度也比tablelayout要快。
GridLayout提供了setRowCount(int)和setColumnCount(int)方法來控制該網格的行和列的數量。
GridLayout常用的XML屬性和方法說明
XML屬性 | 相關方法 | 說明 |
---|---|---|
android:alignmentMode | setAlignmentMode(int) | 設定該佈局管理器採用的對齊模式 |
android:columnCount | setColumnCount(int) | 設定該網格的列數量 |
android:columnOrderPreserved | setColumnOrderPreserved(boolean) | 設定該網格容器是否保留序列號 |
android:roeCount | setRowCount(int) | 設定該網格的行數量 |
android:rowOrderPreserved | setRowOrderPreserved(boolean) | 設定該網格容器是否保留行序號 |
android:useDefaultMargins | setUseDefaultMargins(boolean) | 設定該佈局管理器是否使用預設的頁邊距 |
為了控制GridLayout佈局容器中各子元件的佈局分佈,GridLayout提供了一個內部類:GridLayout.LayoutParams,來控制Gridlayout佈局容器中子元件的佈局分佈。
GridLayout.LayoutParams常用的XML屬性和方法說明
XML屬性 | 說明 |
---|---|
android:layout_column | 設定該元件在GridLayout的第幾列 |
android:layout_columnSpan | 設定該子元件在GridLayout橫向上跨幾列 |
android:layout_gravity | 設定該子元件採用何種方式佔據該網格的空間 |
android:layout_row | 設定該子元件在GridLayout的第幾行 |
android:layout_rowSpan | 設定該子元件在GridLayout縱向上跨幾行 |
5. AbsoluteLayout絕對佈局
即Android不提供任何佈局控制,而是由開發人員自己通過X座標、Y座標來控制組件的位置。每個元件都可指定如下兩個XML屬性:
- layour_x;
- layout_y;
相關推薦
Android四大元件、五大儲存、六大布局、七大生命週期、八大基本資料型別
四大元件:Activity、BroadcastReceive、Service、Content Provider ;五大儲存: SharedPreferences、SDCard 、SQLite資料庫儲存資
Android 四大控制元件,五大儲存,六大布局
一.四大元件: 四大元件分別為activity、service、content provider、broadcast receiver。 1、activity (1)一個Activity通常就是一個單獨的螢幕(視窗)。 (2)Act
Android 四大元件,五大儲存,六大布局
Android 四大元件 android四大元件分別是:Activity, service,content provider,broadcast receiver 一、Activity 1、概念: android 中,Activity 相當於一個頁面,可以在Ac
Android——四大元件、六大布局、五大儲存
一.android四大元件 (一)android四大元件詳解 Android四大元件分別為activity、service、content provider、broadcast receiver。 1、activity &n
Android常用控制元件,用執行緒寫一個進度條。
一、事件監聽(三種寫法) 1、標籤上直接繫結監聽方法 public void xxx(View view) 2、 建立監聽器物件,元件再繫結監聽器物件 2.1、匿名內部類 2.2、使用匿名內部類並定義成全域性的屬性 二、文字框(TextView) 1、T
Android四大元件、六大布局、五大儲存
Android四大元件分別為activity、service、content provider、broadcast receiver。 一、android四大元件詳解 1、activity (1)一個Activity通常就是一個單獨的螢幕(視窗)。 (2)Activi
android開發時為日期控制元件設定選擇範圍,再次點選時顯示上次選擇日期
下面做的是:28天<= 日期 <=65週歲 //計算28天前的日期 public static final long _MAX_TIME = 28 * 24 * 60 * 60 * 1000L;int inComingYear;int inComingMonth;int
Android之控制元件與佈局,結構知識點,基礎完結
在Android中我們常常用到很多UI控制元件,如TextView,EditText,ImageView,Button,ImageButton,ToggleButton,CheckBox,RadioButton等等這些可以自己多用就會了。 也會學到一些
Android開發控制元件-VarietyImageView(百變ImageView,可以根據要求指定哪個角是圓角,哪個角是直角)
ImageView相信是Android開發人員再熟悉不過的一個控制元件了,在一般情況下基本的ImageView也都能滿足我們的開發需求,但相信大家也都遇到過ImageView無法滿足實際需求的情況,這次我就遇到了,先來看下需求: 1)可以設定成圓形ImageView
Android之四大元件、六大布局、五大儲存
一.四大元件: 四大元件分別為activity、service、content provider、b
Android自定義控制元件之畫圓,並且修改其填充色
畫圓就是簡答呼叫了drawCircle的api public class Dot extends View { public Dot(Context context) { s
Android中控制元件的事件——xml設定對應效果state_[pressed,checked,selected,focused]
本篇文章主要是討論下控制元件的點選事件 一、在Drawable中新增控制元件的backgroundColor樣式(點選切換顏色) 直接貼測試結果了:【在Drawable中建立xml資原始檔,在其中的Selector標籤對中新增樣式(如下黑色截圖)】 ImageButton
Android使用webview控制元件載入本地html,通過Js與後臺Java實現資料的傳遞
1.在佈局檔案中加WebView控制元件,在java中獲取WebView物件。 2.載入本地html檔案。 3.開啟js功能。 webView.getSettings().setJa
android 底部控制元件,隨軟鍵盤彈出,跟著上移
有時候我們需要這種效果,鍵盤彈出,底部的內容跟隨上移。今天我就實現了這樣一個小小的效果 話不多說先看效果: 我們直接來看佈局檔案main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayo
Android使用NumberPicker控制元件實現選擇城市,生日
本人菜鳥一枚,第一次寫技術部落格,有點小緊張,加上程式碼很亂,求不噴。 先放效果圖: 介面就這麼簡單。 然後放上程式碼: package com.example.dialog; import java.util.ArrayList;
Android Studio中ListView控制元件:圖片+文字,文字顯示不出來
今天在學習 ListView 控制元件的時候,想做一個滾動介面,顯示圖片+文字。 想象的是這樣子的: 沒想到執行的時候是這樣子的: 於是我抱著試一試的心態壓縮了一下圖片:結果就按照想的顯示出來了。 我覺得應該還有其他的解決辦法,歡迎指出。
ComboBox控制元件對子控制元件做關聯時,出現崩潰問題
上一節,我實現了Combobox控制元件中子控制元件(edit)可以讓游標垂直的效果。 後來,發現了一個問題。 我使用的開發工具是vs2010. 當從工具箱中拖出來的控制元件時,使用上一章節我推薦的方案,沒有問題的。 但是,當自己create出來一個控制元件時,此時就會在下圖位置
重繪ListCtrl中增加子控制元件Edit是,在父控制元件失去焦點時,子控制元件不進行隱藏
問題:現在有一個listctrl控制元件,需要在某一列上新增一個子控制元件edit。當點選子控制元件(edit)時,子控制元件顯示出來,父控制元件(ListCtrl)已經失去焦點了。此時,要是滑鼠點選的位置不在該控制元件內,edit處於顯示狀態,父控制元件(ListCtrl)是失去焦點狀態。
【重大更新】企業級純JavaScript電子表格控制元件SpreadJS v12釋出,新增圖表型別|附下載
下載SpreadJS v12 SpreadJS 表格控制元件——V12 新特性 SpreadJS 是一款基於 HTML5 的純 JavaScript 電子表格和網格功能控制元件,以“高速低耗、純前端、零依賴”為產品特色,被開發人員譽為“可嵌入系統的線上Excel”,同時滿足 .NE
怎樣在程式中獲得ocx控制元件的所有屬性,方法和事件
轉自https://zhidao.baidu.com/question/1671165051357872747.html 使用 #import "c:\winnt\system32\tlbinf32.dll" 匯入TypeLib information庫,該庫提供了類來獲取一個 active d