版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
AndroidStudio移動(dòng)應(yīng)用開發(fā)基礎(chǔ)(第2版)第1章Android概述第2章
建立Android開發(fā)環(huán)境第3章
剖析Android應(yīng)用程序第4章
深入分析Activity第5章Android中常用的UI組件.ptx第6章
樣式和主題第7章
理解和使用Intent第8章
構(gòu)建菜單應(yīng)用程序第9章
動(dòng)畫第10章
多媒體播放第11章
存儲(chǔ)程序數(shù)據(jù)第12章
使用后臺(tái)任務(wù)第13章
使用網(wǎng)絡(luò)第14章Android和HTML5的混合開發(fā)第1章Android概述AndroidStudio移動(dòng)應(yīng)用開發(fā)基礎(chǔ)(第2版)目錄1.1Android是什么1.2Android應(yīng)用程序的組成部分1.3Android的發(fā)展歷史1.4Android開發(fā)環(huán)境概述1.1Android是什么Android是一個(gè)平臺(tái),它包括基礎(chǔ)系統(tǒng)、開發(fā)工具和完整的文檔。Android平臺(tái)是一個(gè)通用的計(jì)算平臺(tái),它采用Linux作為支撐操作系統(tǒng),采用Java作為開發(fā)環(huán)境,通過編程實(shí)現(xiàn)完整的電話、視頻、網(wǎng)絡(luò)、界面設(shè)計(jì)等基礎(chǔ)功能。Android平臺(tái)的體系結(jié)構(gòu)如右圖所示。Linux操作系統(tǒng)是基礎(chǔ)。DalvikVM是一個(gè)修訂的Java虛擬機(jī)。Android以Java庫的形式提供開發(fā)APP的API接口。1.2Android應(yīng)用程序的組成部分Activity:一個(gè)界面就是一個(gè)Activity(窗體),Android的Activity類比為Internet網(wǎng)頁的頁面;View:View(窗體組件)是構(gòu)建應(yīng)用程序界面的基本組件。Activity是由一個(gè)或多個(gè)View構(gòu)成的,Button、Label、TextField等都是View,View是構(gòu)建Activity的基本元素;Intent:Intent是界面之間及功能部件之間實(shí)現(xiàn)信息交互的橋梁,就像在Internet頁面中,當(dāng)用戶單擊不同的頁面鏈接時(shí),會(huì)在不同頁面之間進(jìn)行切換一樣;ContentProvider:是Android建議的應(yīng)用程序之間進(jìn)行數(shù)據(jù)交互的方式;Service:運(yùn)行于后臺(tái)的程序。在一般情況下,Service沒有用戶界面,它運(yùn)行于后臺(tái),并且為運(yùn)行于前端的程序提供服務(wù)。廣播接收器:監(jiān)聽Android平臺(tái)的事件并對(duì)發(fā)生的事件進(jìn)行必要的響應(yīng)。AndroidManifest.xml文件:應(yīng)用程序的配置文件,它將構(gòu)成Android應(yīng)用程序的各個(gè)組件有效地裝配起來,從而構(gòu)成一個(gè)完整的Android應(yīng)用程序。1.3Android的發(fā)展歷史2007年,Google建立了開放手機(jī)聯(lián)盟;2009年,這個(gè)聯(lián)盟成員包括SprintNextel、T-Mobile、Motorola、Samsung、SonyEricsson、Toshiba、Vodafone、Google、Intel、TexasInstruments等IT巨頭;2011年,開放手機(jī)聯(lián)盟的成員已近80家,Android已經(jīng)成為移動(dòng)設(shè)備事實(shí)上的行業(yè)標(biāo)準(zhǔn)。2022年3月,Android平臺(tái)的版本已從1.0發(fā)展到了12.0。本書以12.0版本的Android平臺(tái)為默認(rèn)開發(fā)平臺(tái)。1.4Android開發(fā)環(huán)境概述Android平臺(tái)使用Java作為應(yīng)用程序開發(fā)語言;Android開發(fā)環(huán)境是指Android應(yīng)用程序的開發(fā)環(huán)境,包括Java基本包、Android基礎(chǔ)組件、AndroidUI組件、Android服務(wù)組件、Android電話和媒體服務(wù)組件、Android模擬器(AndroidVirtualDevice,AVD)、Android調(diào)試器等;將在后續(xù)章節(jié)中對(duì)這些內(nèi)容進(jìn)行詳細(xì)介紹;下一章首先從建立Android開發(fā)環(huán)境開始講解。Q&A第2章建立Android開發(fā)環(huán)境AndroidStudio移動(dòng)應(yīng)用開發(fā)基礎(chǔ)(第2版)目錄2.1下載和安裝AndroidStudio2.2開發(fā)第一個(gè)Android應(yīng)用程序2.3Android應(yīng)用程序工程的結(jié)構(gòu)2.4同步練習(xí)2.1下載和安裝AndroidStudio安裝AndroidStudio前,需要安裝JavaSDK,建議安裝JavaSDK8或更高版本;在編寫本書時(shí),AndroidStudio的最新版本是AndroidStudio2021.1.1Patch2;在AndroidDeveloper網(wǎng)站中下載AndroidStudio開發(fā)包,直接運(yùn)行下載的安裝軟件,即可根據(jù)提示安裝AndroidStudio。2.2開發(fā)第一個(gè)Android應(yīng)用程序2.2.1創(chuàng)建First應(yīng)用程序工程First應(yīng)用程序2.3Android應(yīng)用程序工程的結(jié)構(gòu)典型的Android應(yīng)用程序工程的結(jié)構(gòu)如圖所示;AndroidManifest.xml文件:Android應(yīng)用程序的配置文件,它類似于JavaEE程序中的web.xml文件,該文件中包含Android應(yīng)用程序的基本信息;java目錄:java目錄是應(yīng)用程序的Java源代碼程序包和源代碼所在的位置;res目錄:包括drawable、layout、values等子目錄,該目錄與java目錄一樣重要,是經(jīng)常需要操作的目錄。res目錄主要用于存儲(chǔ)Android應(yīng)用程序的資源。2.4同步練習(xí)建立Android開發(fā)環(huán)境,編寫第一個(gè)Android應(yīng)用程序工程,并且運(yùn)行該應(yīng)用程序,觀察該應(yīng)用程序工程的結(jié)構(gòu),熟悉AndroidStudio開發(fā)環(huán)境的各個(gè)功能的使用方法。Q&A第3章剖析Android應(yīng)用程序AndroidStudio移動(dòng)應(yīng)用開發(fā)基礎(chǔ)(第2版)目錄3.1AndroidManifest.xml3.2MainActivity.java——Activity3.3Android應(yīng)用程序資源3.4同步練習(xí)3.1AndroidManifest.xml典型的AndroidManifest.xml文件;<?xmlversion="1.0"encoding="utf-8"?><manifest>標(biāo)簽:根標(biāo)簽;<application>標(biāo)簽:APP配置標(biāo)簽;<activity>標(biāo)簽:配置activity界面;<intent-filter>標(biāo)簽:配置Activity啟動(dòng)方式;APP圖標(biāo)及名稱配置如下圖:3.2MainActivity.java——Activity在啟動(dòng)Android應(yīng)用程序時(shí),Android平臺(tái)會(huì)先讀取AndroidManifest.xml文件,從中獲取入口Activity的相關(guān)信息,再啟動(dòng)入口Activity,用于運(yùn)行該應(yīng)用程序;在Android應(yīng)用程序First中,由于入口Activity是MainActivity,因此,Android平臺(tái)會(huì)首先啟動(dòng)并運(yùn)行MainActivity,從而顯示程序界面;當(dāng)Android平臺(tái)啟動(dòng)并運(yùn)行MainActivity時(shí),系統(tǒng)會(huì)首先調(diào)用onCreate()方法。需要注意的是,Android要求,必須先調(diào)用父類的onCreate()方法,再進(jìn)行自己的初始化工作。在MainActivity文件中的onCreate()方法中,在調(diào)用了父類的onCreate()方法后,調(diào)用setContentView(R.layout.activity_main)方法,用于顯示Activity的主界面;注意以下代碼:
將R.layout.activity_main所表示的界面顯示在屏幕上。參數(shù)R.layout.activity_main就是界面布局文件,它對(duì)應(yīng)工程的res/layout目錄下的activity_main.xml文件;activity_main.xml文件中的代碼:使用ConstraintLayout布局管理器對(duì)組件的布局進(jìn)行管理,這個(gè)布局管理器在水平方向上會(huì)占滿整個(gè)屏幕,代碼為android:layout_width="match_parent",在垂直方向上也會(huì)占滿整個(gè)屏幕,代碼為android:layout_height="match_parent"。在Android應(yīng)用程序中,可以在任何地方直接使用字符串常量,但是,在Android中不建議這么做,Android建議將字符串常量放到res/values/strings.xml文件中進(jìn)行集中管理;Android應(yīng)用程序=Java程序代碼文件+資源文件+AndroidManifest.xml文件3.3Android應(yīng)用程序資源Android應(yīng)用程序資源在Android應(yīng)用程序中起著十分重要的作用。Android應(yīng)用程序資源可以是一個(gè)文件,如布局文件;也可以是一個(gè)值,如字符串常量。將Android應(yīng)用程序資源與Android應(yīng)用程序代碼分離的好處是,可以直接改變資源的值,而不用修改或編譯Android應(yīng)用程序代碼;在Android應(yīng)用程序中,會(huì)用到各種各樣的資源,包括字符串資源、布局資源、id資源、圖片資源、動(dòng)畫資源等;3.3.1字符串資源Android建議將字符串常量統(tǒng)一定義到一個(gè)或多個(gè)XML資源文件中;標(biāo)準(zhǔn)方法:將用到的字符串常量統(tǒng)一定義到res/values/strings.xml文件中;可以將字符串常量定義到多個(gè)文件中;用于定義字符串常量的XML文件必須存儲(chǔ)于工程的res/values目錄下,而文件名可以根據(jù)需要自行定義;Java代碼中訪問res/values/strings.xml文件中定義的字符串資源:
R.string.app_name在XML資源文件中,可以使用以下代碼訪問由app_name屬性定義的字符串資源:
@string/app_name3.3.2布局資源在Android中,可以使用Java代碼直接構(gòu)建應(yīng)用程序界面,但通常使用XML文件構(gòu)建應(yīng)用程序界面。構(gòu)建應(yīng)用程序界面的文件稱為布局文件;在創(chuàng)建該布局文件后,可以通過程序代碼直接將該界面顯示在Activity中:所有的布局文件都必須存儲(chǔ)于res/layout目錄下;類似于在Java代碼中引用字符串資源,在Java代碼中,可以使用R.layout.activity_main布局文件引用特定的布局資源;3.3.3id資源就像給字符串資源、界面布局資源定義唯一的標(biāo)識(shí)符一樣,也可以給界面布局資源中的每個(gè)組件都分配一個(gè)唯一的id;在給界面布局資源中的組件分配唯一的id后,就可以在Android應(yīng)用程序的代碼中引用這些組件了。因此,我們需要在界面布局資源中為每個(gè)需要指定id的組件加上android:id屬性;在Java程序代碼中,可以通過以下代碼獲取id為tv02的組件的引用:
TextViewtv=this.findViewById(R.id.tv02);
tv.setText("歡迎進(jìn)入Android陣營(yíng)!");3.3.4圖片資源Android將圖片也定義為資源;將圖片資源作為文件存儲(chǔ)于res/mipmap(或res/drawable)目錄下,并且可以針對(duì)不同的手機(jī)屏幕尺寸使用不同分辨率的圖片資源文件;針對(duì)收集屏幕大小不同、分辨率不同,同一張圖片可以有多個(gè)資源圖片文件;Android通過采用資源目錄后綴的方式解決這個(gè)國(guó)際化和多設(shè)備類型的支持;對(duì)于圖片資源,后綴包括:-xhdpi、xxhdpi、-hdpi、-ldpi、-mdpi。例如,對(duì)于高分辨率的設(shè)備,會(huì)自動(dòng)從res/mipmap-hdpi目錄下獲取圖片資源文件;對(duì)于低分辨率的設(shè)備,會(huì)自動(dòng)從res/mipmap-ldpi目錄下獲取圖片資源文件;沒有后綴的資源目錄mipmap是默認(rèn)資源目錄:Android在搜索資源時(shí),會(huì)先獲取符合條件的資源,若沒有符合條件的資源,則會(huì)從默認(rèn)資源目錄下獲取資源。新建資源目錄3.3.5Android中的其他資源Android中還有多種其他類型的資源,包括color、animation、array、color-drawable和raw等3.3.6引用資源所有的Android應(yīng)用程序資源都是通過與之關(guān)聯(lián)的標(biāo)識(shí)id進(jìn)行引用的;在Java程序代碼文件中,使用以下代碼,可以引用message_1字符串資源:
R.string.message_1在資源配置XML文件中,使用以下代碼,可以引用message_1字符串資源:
@string/message_1在Java代碼中,引用Android應(yīng)用程序資源的語法格式如下:
[package.]R.在XML資源配置文件中,引用Android應(yīng)用程序資源的語法格式如下:
@[package:]type/nametype:drawable、id、layout、string、menu、string-array等等;package:資源所在的程序包,默認(rèn)是本身,也可以引用Android內(nèi)在資源;3.4同步練習(xí)編寫一個(gè)Android應(yīng)用程序,并且顯示一張自己認(rèn)為漂亮的圖片,然后以文本的形式介紹圖片中的內(nèi)容。在Android幫助文檔中找出Android平臺(tái)定義的所有圖片資源文件,并且在Android應(yīng)用程序中顯示其中任意一張圖片。Q&A第4章深入分析ActivityAndroidStudio移動(dòng)應(yīng)用開發(fā)基礎(chǔ)(第2版)目錄4.1Activity的生命周期4.2Activity生命周期案例4.3使用Log類輸出程序調(diào)試信息4.4Android中常見的Activity4.5同步練習(xí)4.1Activity的生命周期Activity是Android的重要組成部分,它是Android應(yīng)用程序的界面;Activity類中沒有main()函數(shù)!Android應(yīng)用程序的Activity是有生命周期的,它的生命周期是Android平臺(tái)為顯示界面做準(zhǔn)備→顯示界面→用戶與界面交互→關(guān)閉界面;onXXX()稱為生命周期方法或生命周期狀態(tài),Android平臺(tái)會(huì)自動(dòng)調(diào)用Activity提供的這些生命周期方法,使Activity在適當(dāng)?shù)臅r(shí)候處于適當(dāng)?shù)臓顟B(tài)。如果Android平臺(tái)要啟動(dòng)一個(gè)應(yīng)用程序的Activity,那么首先調(diào)用該Activity的onCreate()方法,然后調(diào)用該Activity的onStart()方法,最后調(diào)用Activity的onResume()方法,在調(diào)用onResume()方法后,該Activity(界面)會(huì)顯示于屏幕上,此時(shí),用戶可以與此Activity進(jìn)行交互。一個(gè)應(yīng)用程序的Activity在顯示于屏幕上后,隨時(shí)都有可能被其他Activity覆蓋(其他界面)。例如,當(dāng)進(jìn)行語音通話時(shí),可能會(huì)突然收到一條短信,可以在通話的同時(shí),打開短信應(yīng)用程序閱讀收到的短信,此時(shí),語音通話應(yīng)用程序的Activity被短信應(yīng)用程序的Activity覆蓋;在這種情況下,Android平臺(tái)會(huì)自動(dòng)調(diào)用語音通話應(yīng)用程序的Activity的onPause()方法,然后調(diào)用短信應(yīng)用程序的入口Activity的onCreate()方法、onStart()方法、onResume()方法,此時(shí),就可以查看短信了;短信程序退出后,Android平臺(tái)會(huì)調(diào)用應(yīng)用程序的Activity的onResume()方法,或者先調(diào)用onRestart()方法,再調(diào)用onStart()方法,最后調(diào)用onResume()方法,將語音通話應(yīng)用程序的Activity顯示在屏幕上。當(dāng)用戶調(diào)用Activity的finish()方法時(shí),Android平臺(tái)會(huì)自動(dòng)按順序調(diào)用該Activity的onPause()→onStop()→onDestroy()方法,用于關(guān)閉這個(gè)Activity,停止運(yùn)行當(dāng)前應(yīng)用程序;Activity的生命周期如右圖所示。4.2Activity生命周期案例4.3使用Log類輸出程序調(diào)試信息使用android.util.Log類輸出程序調(diào)試信息;......4.4Android中常見的ActivityActivity類及其子類是AndroidSDK中的關(guān)鍵類,這些類的繼承關(guān)系如圖:4.5同步練習(xí)編寫一個(gè)簡(jiǎn)單的Android應(yīng)用程序,將Activity生命周期方法的調(diào)用過程寫入一個(gè)文件,以便查看Activity生命周期的具體過程。Q&A第5章Android中常用的UI組件AndroidStudio移動(dòng)應(yīng)用開發(fā)基礎(chǔ)(第2版)目錄5.1使用基于XML的布局5.2Android中的基本組件5.3同步練習(xí)一.5.4Android中的容器組件5.5同步練習(xí)二5.6AdapterView組件5.7同步練習(xí)三5.8Android中的其他常用組件5.9同步練習(xí)四5.1使用基于XML的布局Android建議采用將應(yīng)用程序界面與應(yīng)用程序業(yè)務(wù)邏輯分離的方式設(shè)計(jì)應(yīng)用程序;新建一個(gè)Android應(yīng)用程序,在這個(gè)應(yīng)用程序中會(huì)顯示一個(gè)巨大的按鈕,用戶在單擊這個(gè)按鈕后,會(huì)在按鈕上顯示當(dāng)前的日期和時(shí)間;打開布局文件activity_main.xml,修改其中的內(nèi)容,修改后的代碼如下;要修改res/values/strings.xml文件的內(nèi)容:響應(yīng)用戶對(duì)按鈕的點(diǎn)擊操作呢?通過實(shí)現(xiàn)View.OnClickListener接口達(dá)到這個(gè)目的;修改MainActivity.java文件中的代碼:監(jiān)聽對(duì)id為id_button_01的按鈕的點(diǎn)擊事件,當(dāng)按鈕被點(diǎn)擊時(shí),對(duì)這個(gè)點(diǎn)擊事件進(jìn)行相應(yīng)的響應(yīng);5.2Android中的基本組件Android中的基本組件包括Button、TextView、ImageView、EditText、CheckBox、RadioButton等。Android中的組件位于android.widget包中。5.2.1Button組件Button組件沒有自己的XML配置屬性,它的XML配置屬性都是從父類TextView中繼承來的;android:text。設(shè)置顯示在Button組件上的文字,可以是一個(gè)字符串常量,也可以是一個(gè)字符串資源的引用。按照Android的規(guī)則,建議不要直接使用字符串常量,應(yīng)該使用字符串資源的引用。android:textColor。設(shè)置顯示在Button組件上的文字顏色,可以是一個(gè)顏色資源的引用,也可以是一個(gè)顏色值,如"#rgb"、"#argb"、"#rrggbb"和"#aarrggbb"。建議使用顏色資源的引用,至于如何定義及引用顏色資源,將在后續(xù)章節(jié)中進(jìn)行介紹;android:textSize。設(shè)置顯示在Button組件上的文本字號(hào),可以是一個(gè)常數(shù)加單位,如15px、20sp等,也可以是一個(gè)單位度量資源的引用。建議使用單位度量資源的引用,至于如何定義及引用單位度量資源,將在后續(xù)章節(jié)中進(jìn)行介紹。android:textStyle。設(shè)置顯示在Button組件上的文字風(fēng)格,其值包括bold、italic、bolditalic。android:typeface。設(shè)置顯示在Button組件上的文字字體。目前Android支持的字體包括normal、sans、serif、monospace。android:id。設(shè)置Button組件的id屬性,以便在程序代碼中引用該組件。android:background。設(shè)置Button組件的背景,可以是一個(gè)drawable資源的引用,也可以是一個(gè)顏色值,如"#rgb"、"#argb"、"#rrggbb"和"#aarrggbb"。android:clickable。設(shè)置Button組件是否可以響應(yīng)點(diǎn)擊事件,其值包括true、false。android:visibility。設(shè)置Button組件是否可以顯示在屏幕上,其值包括true、false。android:padding、android:paddingTop、android:paddingBottom、android:paddingLeft、android:paddingRight。設(shè)置Button組件的內(nèi)邊界,類似于HTML/CSS中的padding屬性。android:gravity。設(shè)置顯示在Button組件上的提示文字的對(duì)齊方式,其值包括top、right、left、center等將Ch0501應(yīng)用程序工程重命名為Ch0502,并且對(duì)其進(jìn)行修改,我們希望在按鈕上顯示一張背景圖片:在布局文件res/layout/activity_main.xml中為Button組件添加一個(gè)android:background屬性:需要將名為png0030.png的圖片資源文件存儲(chǔ)于res/mipmap-xxx目錄下;Android通過資源配置量詞達(dá)到支持多設(shè)備和國(guó)際化目的:在資源目錄res的所有子資源目錄(如mipmap、drawable、layout、menu、values等),加上后綴,后綴名包括-ldpi、-mdpi、-hdpi、-xhdpi、-xxhdpi等Android的常用資源配置量詞5.2.2TextView組件TextView組件類似于GUI中的Label組件,用于顯示一個(gè)字符串,顯示在TextView組件中的字符串是不可編輯的;TextView組件的XML配置屬性與Button組件的XML配置屬性是類似的;修改Ch0502應(yīng)用程序工程中的代碼,將Button組件替換為TextView組件:修改后的MainActivity.java文件中的代碼修改后的res/values/strings.xml文件5.2.3ImageView組件ImageView組件主要用于顯示一張圖片;android:maxHeight。指定組件的最大高度。android:maxWidth。指定組件的最大寬度。android:scaleType。控制顯示在ImageView組件中的圖片應(yīng)該如何改變大小以適應(yīng)ImageView組件的大小,可用的值:center、centerCrop、centerInside、...;android:src。指定顯示在ImageView組件中的圖片,必須是一個(gè)圖片資源文件的引用。android:contentDescription。設(shè)置圖片的描述性文字。5.2.4EditText組件EditText組件是可編輯的文本組件,與TextView組件類似,但是提供了編輯功能。android:autoText。設(shè)置是否對(duì)輸入的文字進(jìn)行自動(dòng)拼寫檢查,只能取值true或false。android:captalize。設(shè)置是否將輸入的文字改為大寫,只能取值true或false。android:digits。設(shè)置是否只能輸入數(shù)字,只能取值true或false。android:singleLine。設(shè)置是否可以輸入多行,只能取值true或false。android:hint。設(shè)置當(dāng)輸入框?yàn)榭諘r(shí),在輸入框中顯示的提示信息。android:inputType。設(shè)置EditText組件中的文字類型,其值包括none、text、textCapCharacters、textCapWords、textUri、number等。5.2.5CheckBox組件CheckBox組件就是GUI中的復(fù)選框,它繼承了TextView類和View類的XML配置屬性;該組件的常用方法如下。isChecked()。檢查當(dāng)前復(fù)選框是否被勾選。setChecked(Booleanchecked)。設(shè)置當(dāng)前復(fù)選框的勾選狀態(tài)。toggle()。將該復(fù)選框的勾選狀態(tài)反選。5.2.6RadioButton組件RadioButton組件就是GUI中的單選按鈕。在一般情況下,將RadioButton組件與RadioGroup組件結(jié)合使用,通過RadioGroup組件控制RadioButton組件的選中狀態(tài),使一組RadioButton組件中只可以選中一個(gè);RadioGroup組件的常用方法如下:check(intrb)。檢查指定單選按鈕的選中狀態(tài)。clearCheck()。清除所有單選按鈕的選中狀態(tài)。因此,在調(diào)用該方法后,沒有單選按鈕被選中。getCheckedRadioButtonId()。返回被選中的單選按鈕的id,如果沒有單選按鈕被選中,則返回-1。5.3同步練習(xí)一編寫一個(gè)簡(jiǎn)單的Android應(yīng)用程序,在主界面中顯示一個(gè)按鈕,單擊該按鈕,會(huì)在該按鈕上以符合中國(guó)人閱讀習(xí)慣的方式顯示日期和時(shí)間,如以2022年03月10日10:30:17的格式顯示日期和時(shí)間。5.4Android中的容器組件Android中的容器組件是指可以放置其他組件,并且可以對(duì)放置在其中的組件進(jìn)行布局的Android組件。Android中常用的容器組件包括LinearLayout、RelativeLayout、FrameLayout、ScrollView及ConstraintLayout。5.4.1LinearLayout容器組件LinearLayout容器組件是線性布局組件,放置在其中的組件會(huì)按列或按行進(jìn)行順序布局;android:orientation。設(shè)置LinearLayout容器組件的布局方式:按行或按列,其值為horizontal和vertical。android:gravity。設(shè)置布局在LinearLayout容器組件內(nèi)組件的對(duì)齊方式,其值包括top、bottom、left、right、center、start、end等。其他從View類中繼承的屬性,包括android:backgroud、android:visibility等;對(duì)于放置在LinearLayout容器組件中的組件,LinearLayout提供了一些XML配置屬性,用于告知LinearLayout容器組件如何放置這些組件:android:layout_width和android:layout_height、可取值:match_parent/fill_parent、wrap_content、一個(gè)常數(shù)值和單位:px(物理像素)、in(英寸)、mm(毫米)、pt(磅)、dp(邏輯像素):一種基于屏幕密度的抽象單位。在分辨率為160dpi的顯示器上,1dp=1px;在分辨率為240dpi的顯示器上,1dp=1.5px。sp(與刻度無關(guān)的像素):與dp類似,但是可以根據(jù)用戶的文本字號(hào)首選項(xiàng)進(jìn)行縮放。android:layout_gravity。設(shè)置組件在LinearLayout容器組件中的布局方式。android:layout_weight。設(shè)置組件占用LinearLayout容器組件中空余顯示空間的比例。android:layout_margin、android:layout_marginTop、android:layout_marginBottom、android:layout_marginLeft、android:layout_marginRight。舉例說明LinearLayout容器組件的使用方法,在AndroidStudio中新建一個(gè)名為Ch0503的Android應(yīng)用程序工程,修改布局文件activity_main.xml中的代碼:修改res/values/strings.xml文件中的代碼:修改MainActivity.java文件中的代碼:LinearLayout容器組件為布局于其中的組件提供了android:layout_weight布局屬性,它可以使各個(gè)組件按指定的比例共享LinearLayout容器組件的顯示空間;修改res/values/strings.xml文件中的代碼:5.4.2RelativeLayout容器組件RelativeLayout容器組件是一種采用相對(duì)布局方式的容器組件,也就是說,一個(gè)組件相對(duì)于另一個(gè)組件的位置進(jìn)行布局,如將組件A定位到組件B的右下方等等;常用的XML布局屬性:新建一個(gè)名為Ch0505的應(yīng)用程序工程布局文件res/layout/content_main.xml中的代碼:res/values/strings.xml文件中的代碼:5.4.3FrameLayout容器組件FrameLayout容器組件是一種以層疊方式進(jìn)行布局的容器組件,每次只能顯示其中的一個(gè)組件。FrameLayout容器組件為布局在其中的組件提供了一個(gè)XML配置屬性——android:layout_gravity。通過android:layout_gravity屬性,布局在FrameLayout容器組件中的組件可以指定自己在容器中的重心位置,如靠左、靠右等。新建一個(gè)名為Ch0506的Android應(yīng)用程序工程,在主界面中顯示4張圖片,需要先在mipmap目錄下存儲(chǔ)4個(gè)圖片資源文件;修改布局文件res/layout/activity_main.xml中的代碼:修改res/values/strings.xml文件中的代碼:修改MainActivity.java文件中的代碼:5.4.4ScrollView容器組件ScrollView容器組件是FrameLayout容器組件的子組件,主要用于提供垂直滾動(dòng)條,進(jìn)而將超出物理屏幕的內(nèi)容顯示出來;在一般情況下,可以將一個(gè)采用垂直布局方式的LinearLayout容器組件作為ScrollLayout容器組件的子組件,同時(shí),在LinearLayout容器組件中顯示超出屏幕物理高度的內(nèi)容;新建一個(gè)名為Ch0507的Android應(yīng)用程序工程:activity_main.xml文件中的代碼:此處省略多行代碼參見教材代碼......res/values/strings.xml文件中的代碼:5.4.5ConstraintLayout容器組件ConstraintLayout容器組件是一種采用約束布局的容器組件,是在創(chuàng)建Android應(yīng)用程序工程時(shí)使用的默認(rèn)容器組件。ConstraintLayout容器組件采用相對(duì)位置對(duì)新的組件進(jìn)行布局;ConstraintLayout容器組件常用的XML布局屬性:新建一個(gè)名為Ch0508的Android應(yīng)用程序工程,修改布局文件res/layout/activity_main.xml中的代碼:5.5同步練習(xí)二編寫一個(gè)簡(jiǎn)單的計(jì)算器應(yīng)用程序,完成基本的加、減、乘、除運(yùn)算,并且界面布局簡(jiǎn)潔、美觀。5.6AdapterView組件在Android應(yīng)用程序開發(fā)中,AdapterView組件是一類常用且非常重要的組件。以列表的形式顯示信息的ListView組件、以網(wǎng)格形式瀏覽照片縮略圖的GridView組件、以下拉列表形式顯示可選項(xiàng)的Spinner組件等都是AdapterView組件的子組件。5.6.1AdapterView組件入門通過一個(gè)案例講解AdapterView組件的編程模式;使用ListView組件以列表的形式顯示Android平臺(tái)上已經(jīng)安裝的所有應(yīng)用程序信息,這些信息包括應(yīng)用程序的圖標(biāo)、名稱和入口Activity的類名,當(dāng)顯示的內(nèi)容超出物理屏幕可用區(qū)域時(shí),可以進(jìn)行滾動(dòng);屏幕中顯示的部分是一個(gè)ListView組件,小框框住的部分是列表中的一個(gè)列表項(xiàng),在應(yīng)用程序中使用ListView組件顯示信息,必須完成以下的工作。
(1)在界面布局中包含一個(gè)ListView組件。
(2)對(duì)列表中的列表項(xiàng)進(jìn)行布局。
(3)設(shè)計(jì)一個(gè)實(shí)現(xiàn)了Adapter接口的類,用于為L(zhǎng)istView組件提供需要顯
示的數(shù)據(jù)。需要對(duì)Adapter接口有一個(gè)深入的理解;5.6.2Adapter接口AdapterView組件的子組件,這些組件只負(fù)責(zé)顯示數(shù)據(jù),這些要顯示的數(shù)據(jù)必須通過Adapter接口的實(shí)現(xiàn)類進(jìn)行管理;ListView組件主要負(fù)責(zé)顯示數(shù)據(jù),并且對(duì)滾動(dòng)、點(diǎn)擊列表項(xiàng)等事件進(jìn)行處理;要顯示的數(shù)據(jù)由Adapter接口提供。其實(shí),Adapter接口不僅要提供數(shù)據(jù),還要對(duì)顯示在ListView組件中的數(shù)據(jù)進(jìn)行布局封裝,使其形成完整的組件。AdapterView組件顯示數(shù)據(jù)的處理邏輯如下:
(1)當(dāng)AdapterView組件要顯示一項(xiàng)數(shù)據(jù)時(shí),它首先會(huì)調(diào)用Adapter接口的getView()方法,并且傳遞
一個(gè)要顯示數(shù)據(jù)的位置參數(shù)。
(2)Adapter接口根據(jù)這個(gè)位置參數(shù)從Data中獲取指定的數(shù)據(jù),并且根據(jù)R.layout.childView.xml布局
文件的布局樣式將數(shù)據(jù)填入樣式布局,然后將構(gòu)建好的View返回給AdapterView組件。
(3)AdapterView組件將返回的View作為子View顯示在View組件中。Adapter接口中的常用方法及其含義:AndroidSDK提供了幾個(gè)實(shí)現(xiàn)Adapter接口的基礎(chǔ)類,它們分別是BaseAdapter類、ArrayAdapter類、impleAdapter類、SimpleCursorAdapter類。5.6.3ListView組件ListView組件以垂直布局方式顯示數(shù)據(jù)列表,當(dāng)要顯示的數(shù)據(jù)較多,總高度超過屏幕高度時(shí),能以垂直滾動(dòng)的方式顯示其他數(shù)據(jù);下面來看一個(gè)案例:ListView組件以列表的形式顯示書的名稱;新建一個(gè)名為Ch0509的Android應(yīng)用程序工程;在界面布局中包含一個(gè)ListView組件,程序主界面布局文件是activity_main.xml,修改該文件中的代碼:對(duì)列表中的列表項(xiàng)進(jìn)行布局:右擊工程的res/layout目錄,在彈出的快捷菜單中選擇New→LayoutResourceFile命令,如圖5-15所示。在彈出的對(duì)話框的Filename文本框中輸入“l(fā)ist_item.xml”:設(shè)計(jì)一個(gè)實(shí)現(xiàn)了Adapter接口的類,用于為L(zhǎng)istView組件提供要顯示的數(shù)據(jù):在Ch0509應(yīng)用程序工程中,新建一個(gè)名為MyAdapter的Java類:修改MainActivity.java文件中的代碼:使ListView組件顯示的信息更漂亮:使用ListView組件顯示書的名稱,這種效果太單調(diào)了。下面修改Ch0509應(yīng)用程序,使ListView組件中的每一行都顯示書的名稱和封面圖片。需要修改列表項(xiàng)布局文件res/layout/list_item.xml和MyAdapter.java文件。在res/values/strings.xml文件中定義相應(yīng)的字符串資源:修改MyAdapter.java文件中的代碼:響應(yīng)對(duì)ListView組件中列表項(xiàng)的點(diǎn)擊事件:繼續(xù)完善上面的案例,當(dāng)用戶點(diǎn)擊列表框中的某個(gè)列表項(xiàng)時(shí),會(huì)彈出一個(gè)信息提示框,用于顯示當(dāng)前列表項(xiàng)中書的名稱;修改MainActivity.java文件中的代碼,在onCreate()方法中,監(jiān)聽對(duì)ListView組件中列表項(xiàng)的點(diǎn)擊事件,并且實(shí)現(xiàn)對(duì)該點(diǎn)擊事件的響應(yīng)方法onItemClick(),使用ListView組件顯示Android平臺(tái)上已安裝的所有應(yīng)用程序:新建一個(gè)名為Ch0510的Android應(yīng)用程序工程。修改布局文件activity_main.xml中的代碼:創(chuàng)建列表項(xiàng)布局文件list_item.xml:創(chuàng)建MyAdapter.java文件:修改MainActivity.java文件中的代碼:5.6.4Spinner組件Spinner組件是GUI中的下拉列表。與ListView組件類似,我們必須為Spinner對(duì)象指定一個(gè)Adapter接口的實(shí)現(xiàn)類;構(gòu)建一個(gè)簡(jiǎn)單的應(yīng)用程序:在應(yīng)用程序界面中顯示一個(gè)下拉列表,用戶可以從中選擇一個(gè)選項(xiàng),并且在界面中顯示該選項(xiàng)。新建一個(gè)名為Ch0511的Android應(yīng)用程序工程。主界面布局文件res/layout/content_main.xml中的代碼:res/values/strings.xml文件中的代碼:改MainActivity.java文件中的代碼:美化Spinner:在下拉列表中只顯示書的名稱,這種效果太單調(diào)了。下面修改Ch0511應(yīng)用程序,使下拉列表的顯示效果更加美觀;創(chuàng)建一個(gè)下拉列表選項(xiàng)布局文件:dropdown_item.xmlMyArrayAdapter.java文件的代碼:MainActivity.java文件中的代碼:5.6.5GridView組件GridView組件能以二維表格的方式顯示數(shù)據(jù),如果數(shù)據(jù)比較多,那么該組件可以提供垂直滾動(dòng)條。下面舉例:使用GridView組件顯示一組圖片的縮略圖,當(dāng)點(diǎn)擊某個(gè)縮略圖時(shí),使用Toast組件顯示這個(gè)圖片的信息;新建一個(gè)名為Ch0512的Android應(yīng)用程序工程,并且在res/mipmap目錄下存儲(chǔ)需要顯示的圖片資源文件;布局文件res/layout/activity_main.xml文件:GridView組件是AdapterView組件的子組件,因此,需要?jiǎng)?chuàng)建一個(gè)Adapter接口的實(shí)現(xiàn)類,用于提供要顯示的數(shù)據(jù)。創(chuàng)建Adapter接口的實(shí)現(xiàn)類ImageAdapter:MainActivity.java文件:5.7同步練習(xí)三完善5.6.3節(jié)中第2部分的案例,使其顯示書的名稱、封面圖片、作者和出版社名稱。Spinner組件探究:讀者可以查詢資料,通過自我探究修改Spinner組件在展開下拉列表時(shí)的顯示樣式。5.8Android中的其他常用組件在Android平臺(tái)的SDK中,android.widget包中還有許多組件5.9同步練習(xí)四自我學(xué)習(xí):編寫一個(gè)Android應(yīng)用程序,使其可以用WebView組件瀏覽網(wǎng)頁。對(duì)于WebView組件的使用方法,讀者可以參考Android幫助文檔。Q&A第6章樣式和主題AndroidStudio移動(dòng)應(yīng)用開發(fā)基礎(chǔ)(第2版)目錄6.1樣式入門6.2定義樣式6.3應(yīng)用樣式6.4使用Android平臺(tái)已定義的樣式和主題6.5Android應(yīng)用程序的主題結(jié)構(gòu)分析6.6同步練習(xí)6.1樣式入門在進(jìn)行Android應(yīng)用程序的界面設(shè)計(jì)時(shí),經(jīng)常需要對(duì)界面及界面中的組件設(shè)置統(tǒng)一的顯示外觀,如界面的背景顏色、文本字號(hào)、文本顏色、組件的顯示大小、是否顯示標(biāo)題欄等;可以為每個(gè)組件設(shè)置自己的顯示屬性,但是為了便于對(duì)外觀進(jìn)行統(tǒng)一管理,需要將這些外觀設(shè)置集中起來。Android是通過樣式(Style)完成這項(xiàng)工作的;舉例說明Android是如何定義樣式及將定義好的樣式應(yīng)用于界面中的。新建一個(gè)名為Ch0601的Android應(yīng)用程序工程,然后修改布局文件res/layout/activity_main.xml中的代碼:res/values/strings.xml文件中的代碼:下面修改Button組件和TextView組件的樣式。在工程的res/values目錄下,新建一個(gè)名為mystyles.xml的文件,修改該文件中的代碼:修改res/layout/activity_main.xml文件中的代碼:6.2定義樣式要定義一個(gè)樣式,可以在工程的res/values目錄下新建一個(gè)XML文件,也可以在現(xiàn)有的某個(gè)文件中(如styles.xml文件)直接添加要定義的樣式6.2.1定義樣式的一般格式定義樣式的一般格式如下:在Java文件中,以“R.style.定義樣式名稱”的格式訪問定義的樣式,在XML文件中,以“@style/自定義樣式名稱”的格式訪問定義的樣式。需要注意的是,在定義樣式時(shí),parent屬性是可選屬性,parent="父樣式名稱"表示定義的樣式是支持繼承的,這種樣式是級(jí)聯(lián)樣式。下面來看一個(gè)定義樣式的案例:通過繼承定義新的樣式:6.2.2樣式定義中的可用屬性樣式的應(yīng)用目標(biāo)不同,樣式定義中的可用屬性也有所不同。例如,定義一個(gè)針對(duì)TextView組件的樣式和一個(gè)針對(duì)Button組件的樣式,這兩個(gè)樣式定義中的可用屬性是不同的。因此,應(yīng)該針對(duì)樣式的應(yīng)用目標(biāo)、參考組件的可用XML配置屬性,確定樣式定義中的可用屬性。但有一種例外,如果將某個(gè)樣式應(yīng)用于某個(gè)組件上,而在該樣式定義中包含該組件不支持的屬性,那么該組件會(huì)自動(dòng)忽略這個(gè)不支持的屬性,不會(huì)影響其他支持的屬性所起的作用;可以參考Android幫助文檔中的android.R.styleable類,在該類中對(duì)每個(gè)Android組件都給出了其樣式定義中的可用屬性;6.3應(yīng)用樣式在完成樣式定義后,可以將樣式應(yīng)用于某個(gè)組件上,也可以將樣式應(yīng)用于某個(gè)Activity或整個(gè)Application上。6.3.1將樣式應(yīng)用于某個(gè)組件上將定義好的樣式應(yīng)用于某個(gè)組件上是一項(xiàng)非常簡(jiǎn)單的工作,在組件的配置中添加styleXML配置屬性即可;可以將樣式應(yīng)用于具體組件上,也可以將樣式應(yīng)用于容器組件上。需要注意的是,應(yīng)用于容器組件上的樣式只對(duì)容器組件本身有效,對(duì)放置于該容器組件中的子組件是不起作用的。6.3.2將樣式應(yīng)用于某個(gè)Activity或整個(gè)Application上將樣式應(yīng)用于某個(gè)Activity或整個(gè)Application上時(shí),這個(gè)樣式就成為了主題。定義一個(gè)樣式,代碼如下:然后將這個(gè)樣式應(yīng)用于某個(gè)Activity上,代碼如下:
<activityandroid:theme="@style/CustomTheme">或者將這個(gè)樣式應(yīng)用于整個(gè)Application上,代碼如下:
<applicationandroid:theme="@style/CustomTheme">6.4使用Android平臺(tái)已定義的樣式和主題Android平臺(tái)預(yù)定義了一系列的樣式和主題,以供應(yīng)用程序使用。在定義的所有樣式中,以Theme開頭的樣式是主題,不是以Theme開頭的樣式是普通樣式。對(duì)于Android中完整的樣式定義,讀者可以參考Android幫助文檔中的android.R.style類。要使用Android平臺(tái)已定義的樣式或主題,需要將樣式或主題名中的下畫線“_”替換為小數(shù)點(diǎn)“.”。6.5Android應(yīng)用程序的主題結(jié)構(gòu)分析在AndroidStudio中新建Android應(yīng)用程序工程時(shí),Android已經(jīng)在AndroidManifest.xml文件中為該Android應(yīng)用程序設(shè)置了默認(rèn)的主題:6.6同步練習(xí)Android平臺(tái)中預(yù)定義了很多樣式和主題,將表6-1中的樣式和主題應(yīng)用于一個(gè)Android應(yīng)用程序中,觀察每個(gè)樣式或主題的外觀。Q&A第7章理解和使用IntentAndroidStudio移動(dòng)應(yīng)用開發(fā)基礎(chǔ)(第2版)目錄7.1Intent入門7.2同步練習(xí)一.7.3細(xì)說Intent7.4Intent解析7.5獲取Activity返回的結(jié)果7.6Intent的綜合應(yīng)用案例7.7同步練習(xí)二7.8廣播消息和廣播接收器.7.9同步練習(xí)三.7.1Intent入門Intent不僅實(shí)現(xiàn)Activity之間的跳轉(zhuǎn),還是Android平臺(tái)中各個(gè)部分之間實(shí)現(xiàn)信息溝通的橋梁;通過一個(gè)簡(jiǎn)單的案例說明什么是Intent,以及Intent的基本應(yīng)用;這個(gè)案例應(yīng)用程序的目標(biāo)是,首先顯示一個(gè)Activity,在這個(gè)Activity中使用TextView組件顯示一張圖片的名稱及一個(gè)按鈕,點(diǎn)擊這個(gè)按鈕,即可在一個(gè)新的Activity中顯示這張圖片;新建名為Ch0701的Android應(yīng)用程序工程,修改主界面布局文件res/layout/activity_main.xml中的代碼:在res/layout目錄下,新建一個(gè)名為layout02.xml的布局文件:res/values/strings.xml文件:如果此時(shí)運(yùn)行Ch0701應(yīng)用程序,那么可以正確顯示第一個(gè)Activity,但是當(dāng)點(diǎn)擊按鈕時(shí),不會(huì)顯示第二個(gè)Activity;為了顯示第二個(gè)Activity,我們需要?jiǎng)?chuàng)建一個(gè)新的Activity,使之顯示layout02.xml文件的界面。為此,在Ch0701應(yīng)用程序工程的src目錄下的com.example.ch0701包中,新建一個(gè)名為Activity02的Java類文件:修改MainActivity.java文件中的代碼:修改AndroidManifest.xml文件:7.2同步練習(xí)一編寫一個(gè)與7.1節(jié)中的案例相似、能通過Intent對(duì)象打開新的Activity的Android應(yīng)用程序。例如,讀者可以在點(diǎn)擊一張圖片后,顯示一個(gè)文本框,用于顯示該圖片的基本信息。7.3細(xì)說IntentAndroid的Intent對(duì)象是聯(lián)系各個(gè)Activity的關(guān)鍵對(duì)象。Intent的中文含義是意圖,可以這樣理解Intent:通過Intent對(duì)象告訴Android要做什么;上述代碼表示我們希望Android平臺(tái)啟動(dòng)Activity02。按照這種方式創(chuàng)建的Intent稱為顯式Intent:在Intent中,我們明確地告訴Android平臺(tái)要啟動(dòng)的Activity。還有一種Intent稱為隱式Intent:在Intent對(duì)象中指定一些條件,Android平臺(tái)會(huì)根據(jù)這些條件啟動(dòng)最符合條件的Activity。為了便于讀者理解隱式Intent,對(duì)7.1節(jié)中的Ch0701應(yīng)用程序工程進(jìn)行修改。首先,修改AndroidManifest.xml文件中的代碼:修改MainActivity.java文件:隱式Intent的配置過程:7.3.1Intent的actionIntent的action主要用于啟動(dòng)Activity。action是一個(gè)字符串常量,我們可以任意定義,但是,Android建議采用“Java包名+特定字符串”的形式為action命名;Intent中預(yù)定義了一些常用的action,包括Intent.ACTION_MAIN、Intent.ACTION_VIEW、Intent.ACTION_EDIT、Intent.ACTION_PICK、Intent.ACTION_DIAL等,每個(gè)action都有明確的含義。為Intent對(duì)象指定action的方式有以下兩種:
(1)通過Intent類的構(gòu)造方法newIntent(Stringaction)及newIntent(Stringaction,URIuri)。
(2)通過Intent類的setAction(Stringaction)方法。指定一個(gè)Activity可以被哪些action打開,需要在AndroidManifest.xml文件中使用<intent-filter>標(biāo)簽說明,7.3.2Intent的dataActivity的data是在AndroidManifest.xml文件中Activity配置的<intent-filter>標(biāo)簽中通過<data>標(biāo)簽指定的,data中的屬性(簡(jiǎn)稱data屬性)包括host、mimeType、path、pathPattern、pathPrefix、port和scheme。data屬性的一般格式如下:在Intent中設(shè)置data屬性的方法如下:
(1)setData(Uridata)。設(shè)置Intent對(duì)象的data屬性,該方法會(huì)自動(dòng)清除之前設(shè)置的mimeType屬性。
(2)setDataAndType(Uridata,StringmimeType)。同時(shí)設(shè)置Intent對(duì)象的data屬性和mimeType屬性。
(3)setType(StringmimeType)。設(shè)置Intent對(duì)象的mimeType屬性,它會(huì)自動(dòng)清除之前設(shè)置的data屬性。舉例說明如何在<intent-filter>標(biāo)簽中設(shè)置data屬性,并且使用隱式Intent啟動(dòng)設(shè)置了data屬性的Activity:創(chuàng)建一個(gè)Intent對(duì)象,然后采用隱式方式啟動(dòng)該Activity:7.3.3Intent的categorycategory的含義是類別,它是Android對(duì)Activity進(jìn)行分類的一種手段。Intent中預(yù)定義了一些category,常用的category包括Intent.CATEGORY_DEFAULT、Intent.CATEGORY_LAUNCHER、Intent.CATEGORY_HOME、Intent.CATEGORY_PREFERENCE、Intent.CATEGORY_CAR_DOCK、Intent.CATEGORY_APP_MARKET等;這個(gè)案例獲取所有出現(xiàn)在HOME屏幕上的Activity:7.3.4Intent的extraextra只作為傳遞給目標(biāo)Activity的附加數(shù)據(jù),不作為挑選Activity的匹配依據(jù);extra是以key/value形式表示的數(shù)據(jù),其中的key是String類型的鍵,value可以是Java基本數(shù)據(jù)類型,也可以是實(shí)現(xiàn)了android.os.Parcelable接口的對(duì)象數(shù)據(jù)類型。Intent提供了寫入及讀取基本數(shù)據(jù)類型數(shù)據(jù)的方法。7.4Intent解析Intent對(duì)象與<intent-filter>標(biāo)簽是密切相關(guān)的:在使用Intent對(duì)象啟動(dòng)某個(gè)Activity時(shí),必須將Intent對(duì)象中設(shè)置的屬性(action、data和category)與<intent_x0002_filter>標(biāo)簽中配置的屬性進(jìn)行匹配,從而啟動(dòng)能夠匹配的Activity。將這種匹配操作稱為Intent解析。(1)在顯式匹配中,在Intent對(duì)象中明確指定要啟動(dòng)的Activity的名稱,方法包括newIntent(ContextpackageContext,Class<?>cls)、setComponent(ComponentName)、setClass(Context,Class)。(2)在隱式匹配中,分為以下幾種情況。
如果在Intent對(duì)象中設(shè)置了action且設(shè)置的action出現(xiàn)在<intent-filter>標(biāo)簽中,或者在<intent-filter>標(biāo)簽中未設(shè)置任何action,則匹配;如果在Intent中未設(shè)定action,則匹配所有的Activity。
如果在Intent對(duì)象中設(shè)置了data且設(shè)置的data出現(xiàn)在<intent-filter>標(biāo)簽中,則匹配;如果在Intent對(duì)象中未設(shè)置data,則只能匹配未設(shè)置data的Activity。
如果在Intent對(duì)象中設(shè)置了category且設(shè)置的category出現(xiàn)在<intent-filter>標(biāo)簽中,則匹配;如果在Intent對(duì)象中未設(shè)置category,則只能匹配未設(shè)置category的Activity。7.5獲取Activity返回的結(jié)果如果需要獲取被對(duì)象的Activity返回的結(jié)果。在使用startActivityForResult()方法啟動(dòng)Activity時(shí),在被啟動(dòng)的Activity(稱為目標(biāo)Activity)執(zhí)行完畢后,Android平臺(tái)會(huì)調(diào)用源Activity的onActivityResult()方法;startActivityForResult()方法的原型如下:在目標(biāo)Activity執(zhí)行完畢后,Android平臺(tái)會(huì)啟動(dòng)者調(diào)用onActivityResult()方法。方法的原型如下:目標(biāo)Activity使用setResult()方法設(shè)置返回結(jié)果。setResult()方法的原型如下:舉例說明如何啟動(dòng)一個(gè)Activity,并且接收從目標(biāo)Activity返回的結(jié)果;該案例應(yīng)用程序運(yùn)行效果的首界面,點(diǎn)擊按鈕,界面中會(huì)顯示兩張圖片,此時(shí),點(diǎn)擊任意一張圖片,都可以關(guān)閉該Activity,并且在首界面中顯示所點(diǎn)擊圖片的編號(hào);新建名為Ch0702的Android應(yīng)用程序工程。修改主界面布局文件res/layout/activity_main.xml中的代碼:在res/layout目錄下新建一個(gè)名為activity_second.xml的布局文件:修改res/values/strings.xml:修改MainActivity.java文件:com.example.ch0702包中新建一個(gè)名為SecondActivity的Java類文件:AndroidManifest.xml文件:7.6Intent的綜合應(yīng)用案例案例應(yīng)用程序運(yùn)行效果的首界面為一個(gè)功能列表,點(diǎn)擊“瀏覽網(wǎng)頁”圖片按鈕,會(huì)啟動(dòng)瀏覽器,點(diǎn)擊“撥打電話”圖片按鈕,會(huì)顯示撥打電話界面:新建一個(gè)名為Ch0703的Android應(yīng)用程序工程,并且將需要用到的圖片資源文件存儲(chǔ)于res/mipmap目錄下。修改布局文件res/layout/activity_main.xml中的代碼:修改res/values/strings.xml文件:修改MainActivity.java文件:......7.7同步練習(xí)二完善7.6節(jié)中的案例應(yīng)用程序,要求如下。
(1)將顯示在按鈕右邊的字體調(diào)大,使其與左邊的按鈕大小相匹配。
(2)新建一個(gè)Activity,單擊圖7-7所示界面中的一個(gè)按鈕,能夠啟動(dòng)并運(yùn)行該Activity,該Activity會(huì)返回
一些數(shù)據(jù)給MainActivity,并且MainActivity能夠顯示返回的數(shù)據(jù)。7.8廣播消息和廣播接收器使用Intent對(duì)象不僅可以啟動(dòng)新的Activity,還可以在應(yīng)用程序之間廣播消息;Android提供了兩種可廣播消息,即普通消息和有序消息。普通消息是指所有對(duì)該消息感興趣的接收者都可以收到的消息,接收者收到該消息的順序是隨機(jī)的。有序消息是指按指定優(yōu)先級(jí)傳遞的消息,將消息先傳遞給具有最高優(yōu)先級(jí)的接收者,具有最高優(yōu)先級(jí)的接收者可以決定是否繼續(xù)轉(zhuǎn)發(fā)該消息給其他低優(yōu)先級(jí)的接收者;只介紹普通消息。7.8.1發(fā)送和接收普通消息所有Activity都可以使用sendBroadcast(Intentintent)方法和sendBroadcast(Intentintent,StringreceiverPermission)方法發(fā)送普通消息;使用sendBroadcast(Intentintent)方法可以將普通消息發(fā)送給所有的接收者,無論接收者是否具有接收權(quán)限;使用sendBroadcast(Intentintent,StringreceiverPermission)方法可以將普通消息發(fā)送給具有接收權(quán)限的接收者。要接收sendBroadcast()方法發(fā)送的普通消息,接收者必須繼承BroadcastReceiver類,并且需要實(shí)現(xiàn)其中的onReceive(Contextcontext,Intentintent)方法。此外,需要在AndroidManifest.xml文件或程序代碼中注冊(cè)這個(gè)接收者。舉例說明如何發(fā)送和接收普通消息。該案例應(yīng)用程序的首界面中有一個(gè)輸入框和一個(gè)按鈕,在輸入框中輸入要發(fā)送的消息,點(diǎn)擊按鈕即可將消息發(fā)送出去;消息接收者在接收到該消息后,會(huì)通過Toast組件將該消息顯示出來;新建一個(gè)名為Ch0704的Android應(yīng)用程序工程。修改布局文件res/layout/activity_main.xml中的代碼:修改res/values/strings.xml文件中的代碼:修改MainActivity.java文件中的代碼:消息接收器,用于接收該消息。新建一個(gè)名為MyReceiver的Java類文件:AndroidManifest.xml文件:除了可以在AndroidManifest.xml文件中注冊(cè)消息接收者(稱為靜態(tài)注冊(cè)),還可以在Java代碼中注冊(cè)消息接收者(稱為動(dòng)態(tài)注冊(cè))。修改后的MainActivity.java文件:7.8.2接收Android平臺(tái)廣播的普通消息Android平臺(tái)在特定的情況下會(huì)廣播特定的普通消息,任何感興趣的接收者通過注冊(cè)均可以接收到這些普通消息。7.9同步練習(xí)三編寫一個(gè)消息接收器應(yīng)用程序,該應(yīng)用程序既可以接收自己編寫的應(yīng)用程序發(fā)送的普通消息,又可以接收Android平臺(tái)發(fā)送的Intent.ACTION_POWER_CONNECTED消息,設(shè)計(jì)界面并測(cè)試該應(yīng)用程序Q&A第8章構(gòu)建菜單應(yīng)用程序AndroidStudio移動(dòng)應(yīng)用開發(fā)基礎(chǔ)(第2版)目錄8.1菜單8.2同步練習(xí)8.1菜單在使用AndroidStudio構(gòu)建的Android應(yīng)用程序界面中,會(huì)顯示一個(gè)菜單彈出按鈕(方框框住部分),點(diǎn)擊這個(gè)按鈕,會(huì)顯示菜單功能項(xiàng)。舉例說明Android菜單的使用方法。新建一個(gè)名為Ch0801的Android應(yīng)用程序工程,在res目錄下創(chuàng)建menu子目錄,然后創(chuàng)建res/menu/menu_main.xml文件:要修改res/values/strings.xml文件:MainActivity.java文件:8.2同步練習(xí)編寫一個(gè)簡(jiǎn)單的菜單應(yīng)用程序,在菜單中顯示兩個(gè)菜單功能項(xiàng),用于切換不同的圖片:點(diǎn)擊“上一張”菜單功能項(xiàng),會(huì)顯示上一張圖片;點(diǎn)擊“下一張”菜單功能項(xiàng),會(huì)顯示下一張圖片。Q&A第9章動(dòng)畫AndroidStudio移動(dòng)應(yīng)用開發(fā)基礎(chǔ)(第2版)目錄9.1View動(dòng)畫之補(bǔ)間動(dòng)畫基礎(chǔ)9.2View動(dòng)畫之幀動(dòng)畫9.3同步練習(xí)9.1View動(dòng)畫之補(bǔ)間動(dòng)畫基礎(chǔ)Android支持兩種類型的動(dòng)畫,分別為屬性動(dòng)畫和View動(dòng)畫。View動(dòng)畫分為兩種,分別為補(bǔ)間動(dòng)畫和幀動(dòng)畫。動(dòng)畫的基本原理是在特定的時(shí)間內(nèi),將組件的某個(gè)屬性值從一個(gè)值變化到一個(gè)新的值,或者將某個(gè)組件的顯示狀態(tài)從一種狀態(tài)變化到一種新的狀態(tài)。View動(dòng)畫是最常用的動(dòng)畫,因此,本章主要介紹View動(dòng)畫的補(bǔ)間動(dòng)畫和幀動(dòng)畫。9.1.1補(bǔ)間動(dòng)畫舉例補(bǔ)間動(dòng)畫的基本原理是在特定的時(shí)間內(nèi),按照一定的速度,將組件從一個(gè)位置移動(dòng)到另一個(gè)位置、從一個(gè)角度旋轉(zhuǎn)到另一個(gè)角度、顯示透明度從一個(gè)值變換到另一個(gè)值、大小從一個(gè)尺寸變換到另一個(gè)尺寸,Android還允許將以上4種操作合并在一個(gè)動(dòng)畫中執(zhí)行;個(gè)簡(jiǎn)單的案例:在4秒內(nèi),以一個(gè)TextView組件的左下角為旋轉(zhuǎn)中心,將其從0度順時(shí)針旋轉(zhuǎn)到90度,并且旋轉(zhuǎn)的速度越來越快。該案例應(yīng)用程序的運(yùn)行效果如圖,TextView組件會(huì)持續(xù)旋轉(zhuǎn),直到4秒后完成動(dòng)畫并顯示最終效果:新建一個(gè)名為Ch0901的Android應(yīng)用程序工程,然后修改布局文件res/layout/activity_main.xml:修改res/values/strings.xml文件:Android建議使用XML文件定義動(dòng)畫,并且View動(dòng)畫定義文件必須存儲(chǔ)于工程的res/anim目錄下。創(chuàng)建一個(gè)名為my_rotate.xml的View動(dòng)畫定義文件:修改MainActivity.java文件:9.1.2補(bǔ)間動(dòng)畫的形式補(bǔ)間動(dòng)畫包括5種動(dòng)畫形式,分別為旋轉(zhuǎn)動(dòng)畫、縮放動(dòng)畫、透明度動(dòng)畫、移位動(dòng)畫和復(fù)合動(dòng)畫,標(biāo)簽分別為<rotate>、<scale>、<alpha>、<translate>和<set>。定義旋轉(zhuǎn)動(dòng)畫的一般格式如下:定義縮放動(dòng)畫的一般格式如下:定義透明度動(dòng)畫的一般格式如下:定義移位動(dòng)畫的一般格式如下:定義復(fù)合動(dòng)畫:9.1.3使用動(dòng)畫監(jiān)聽器接口使用動(dòng)畫監(jiān)聽器接口Animation.AnimationListener可以監(jiān)聽動(dòng)畫執(zhí)行的各個(gè)階段:修改MainActivity.java文件:9.2View動(dòng)畫之幀動(dòng)畫幀動(dòng)畫的基本原理是按一定的時(shí)間順序顯示一組預(yù)定義的圖片。在使用XML文件定義幀動(dòng)畫時(shí),需要將幀動(dòng)畫定義文件存儲(chǔ)于工程的res/drawable目錄下,文件名可以是任意合法的文件名。在XML文件或在Java類文件中引用幀動(dòng)畫資源的形式與引用一般圖片資源文件的形式是一樣的,可以在任何可以使用drawable資源的地方使用幀動(dòng)畫資源。定義幀動(dòng)畫的一般格式如下:舉例說明如何在Android應(yīng)用程序中使用幀動(dòng)畫:按順序顯示一組圖片:新建一個(gè)名為Ch0902的Android應(yīng)用程序工程。在res/drawable目錄下存儲(chǔ)圖片,并且新建一個(gè)名為drawable_rotate.xml的幀動(dòng)畫資源文件:修改布局文件res/layout/activity_main.xml中的代碼:修改res/values/strings.xml文件:修改MainActivity.java文件:9.3同步練習(xí)編寫一個(gè)簡(jiǎn)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025土地承包合同終止范例
- 2025知識(shí)產(chǎn)權(quán)委托代理合同
- 2025地下車庫買賣合同書
- 2025貨樣買賣合同范本
- 二零二五年度文化產(chǎn)業(yè)公司股權(quán)受讓協(xié)議書范例3篇
- 二零二五年度特色農(nóng)產(chǎn)品種植基地土地永久轉(zhuǎn)讓協(xié)議
- 2025年度農(nóng)機(jī)購(gòu)置與農(nóng)業(yè)人才培訓(xùn)合同3篇
- 二零二五年度物聯(lián)網(wǎng)技術(shù)合伙協(xié)議3篇
- 2025年度綜合交通樞紐停車場(chǎng)租賃與交通換乘服務(wù)合同3篇
- 2025年度高端裝備制造企業(yè)整體轉(zhuǎn)讓協(xié)議版3篇
- 化纖織造行業(yè)-生產(chǎn)工藝流程簡(jiǎn)介課件
- 棚戶區(qū)改造項(xiàng)目房屋拆除工程施工組織設(shè)計(jì)方案
- 流行病學(xué)知識(shí)考核試題題庫與答案
- DB11-T212-2017園林綠化工程施工及驗(yàn)收規(guī)范
- 小學(xué)數(shù)學(xué)自制教具學(xué)具的研究及探討
- 廣東省幼兒園一日活動(dòng)指引(試行)
- 光學(xué)材料-光學(xué)加工流程
- 奔馳卡車產(chǎn)品分析(課堂PPT)
- 反循環(huán)鉆孔灌注樁施工方案
- 新能源小客車購(gòu)車充電條件確認(rèn)書
- 發(fā)明專利專利答辯模板
評(píng)論
0/150
提交評(píng)論