1. 程式人生 > >Android 四大控制元件,五大儲存,六大布局

Android 四大控制元件,五大儲存,六大布局

  一.四大元件:

四大元件分別為activityservicecontent providerbroadcast receiver

1activity

1)一個Activity通常就是一個單獨的螢幕(視窗)。

2Activity之間通過Intent進行通訊。

3android應用中每一個Activity都必須要在AndroidManifest.xml配置檔案中宣告,否則系統將不識別也不執行該Activity

2service

1service用於在後臺完成使用者指定的操作。service分為兩種:

astarted

(啟動):當應用程式元件(如activity)呼叫startService()方法啟動服務時,服務處於started狀態。

bbound(繫結):當應用程式元件呼叫bindService()方法繫結到服務時,服務處於bound狀態。

(2)startService()bindService()區別:

(a)started service(啟動服務)是由其他元件呼叫startService()方法啟動的,這導致服務的onStartCommand()方法被呼叫。當服務是started狀態時,其生命週期與啟動它的元件無關,並且可以在後臺無限期執行,即使啟動服務的元件已經被銷燬。因此,服務需要在完成任務後呼叫stopSelf()

方法停止,或者由其他元件呼叫stopService()方法停止。

(b)使用bindService()方法啟用服務,呼叫者與服務繫結在了一起,呼叫者一旦退出,服務也就終止,大有“不求同時生,必須同時死”的特點。

(3)開發人員需要在應用程式配置檔案中宣告全部的service,使用<service></service>標籤。

(4)Service通常位於後臺執行,它一般不需要與使用者互動,因此Service元件沒有圖形使用者介面。Service元件需要繼承Service基類。Service元件通常用於為其他元件提供後臺服務或監控其他元件的執行狀態。

3

content provider

1android平臺提供了Content Provider使一個應用程式的指定資料集提供給其他應用程式。其他應用可以通過ContentResolver類從該內容提供者中獲取或存入資料

2)只有需要在多個應用程式間共享資料是才需要內容提供者。例如,通訊錄資料被多個應用程式使用,且必須儲存在一個內容提供者中。它的好處是統一資料訪問方式。

3ContentProvider實現資料共享ContentProvider用於儲存和獲取資料,並使其對所有應用程式可見。這是不同應用程式間共享資料的唯一方式,因為android沒有提供所有應用共同訪問的公共儲存區。

4)開發人員不會直接使用ContentProvider類的物件,大多數是通過ContentResolver物件實現對ContentProvider的操作。

5ContentProvider使用URI來唯一標識其資料集,這裡的URIcontent://作為字首,表示該資料由ContentProvider來管理。

4broadcast receiver

1)你的應用可以使用它對外部事件進行過濾,只對感興趣的外部事件(如當電話呼入時,或者資料網路可用時)進行接收並做出響應。廣播接收器沒有使用者介面。然而,它們可以啟動一個activityserice來響應它們收到的資訊,或者用NotificationManager來通知使用者。通知可以用很多種方式來吸引使用者的注意力,例如閃動背燈、震動、播放聲音等。一般來說是在狀態列上放一個持久的圖示,使用者可以開啟它並獲取訊息。

2)廣播接收者的註冊有兩種方法,分別是程式動態註冊和AndroidManifest檔案中進行靜態註冊。

3)動態註冊廣播接收器特點是當用來註冊的Activity關掉後,廣播也就失效了。靜態註冊無需擔憂廣播接收器是否被關閉,只要裝置是開啟狀態,廣播接收器也是開啟著的。也就是說哪怕app本身未啟動,該app訂閱的廣播在觸發時也會對它起作用。

二、android四大元件總結:

14大元件的註冊

4大基本元件都需要註冊才能使用,每個ActivityserviceContent Provider都需要在AndroidManifest檔案中進行配置。AndroidManifest檔案中未進行宣告的activity、服務以及內容提供者將不為系統所見,從而也就不可用。而broadcast receiver廣播接收者的註冊分靜態註冊(在AndroidManifest檔案中進行配置)和通過程式碼動態建立並以呼叫Context.registerReceiver()的方式註冊至系統。需要注意的是在AndroidManifest檔案中進行配置的廣播接收者會隨系統的啟動而一直處於活躍狀態,只要接收到感興趣的廣播就會觸發(即使程式未執行)。

24大元件的啟用

內容提供者的啟用:當接收到ContentResolver發出的請求後,內容提供者被啟用。而其它三種元件activity、服務和廣播接收器被一種叫做intent的非同步訊息所啟用

34大元件的關閉

內容提供者僅在響應ContentResolver提出請求的時候啟用。而一個廣播接收器僅在響應廣播資訊的時候啟用。所以,沒有必要去顯式的關閉這些元件。Activity關閉:可以通過呼叫它的finish()方法來關閉一個activity。服務關閉:對於通過startService()方法啟動的服務要呼叫Context.stopService()方法關閉服務,使用bindService()方法啟動的服務要呼叫Contex.unbindService()方法關閉服務。

4android中的任務(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_[pressedcheckedselectedfocused]

本篇文章主要是討論下控制元件的點選事件 一、在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