版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第一章 Android基礎(chǔ)入門(mén)1.1 Android 簡(jiǎn)介1.3 創(chuàng)建第一個(gè)Android項(xiàng)目1.2 開(kāi)發(fā)環(huán)境搭建1.4 工具使用日志工具1.5 小結(jié)1.1 Android 簡(jiǎn)介1.1.1 Android起源 Android本意指“機(jī)器人”,Google公司將Android的標(biāo)識(shí)設(shè)計(jì)為一個(gè)綠色機(jī)器人, 表示Android系統(tǒng)符合環(huán)保概念,是一個(gè)輕薄短小,功能強(qiáng)大的移動(dòng)系統(tǒng),是第一個(gè)真正為手機(jī)打造的開(kāi)放性系統(tǒng)。Android操作系統(tǒng)最初是由安迪魯賓(Andy Rubin)開(kāi)發(fā)出的,2005年被Google收購(gòu),并于2007年11月5日正式向外界展示了這款系統(tǒng)。1.1 Android 簡(jiǎn)介1.1.
2、1 Android起源2008年9月發(fā)布Android第1個(gè)版本Android1.1。 2009年4月30日,Android1.5 Cupcake(紙杯蛋糕)正式發(fā)布。2009年9月5日,Android1.6 Donut(甜甜圈)版本發(fā)布。2016年Google I/O大會(huì),Android7.0 Nougat(牛軋?zhí)牵┌姹景l(fā)布。2018年8月,谷歌發(fā)布了Android9.0 Pie(派)版本發(fā)布。1.1 Android 簡(jiǎn)介1.1.2 Android系統(tǒng)架構(gòu)鬧鐘通知管理器多媒體框架音頻驅(qū)動(dòng)1.1 Android 簡(jiǎn)介1.1.3 Android應(yīng)用開(kāi)發(fā)特點(diǎn)四大組件基于寄存器的虛擬機(jī)豐富的系統(tǒng)控件
3、SQLite數(shù)據(jù)庫(kù)地理位置定位傳感器 1.2 開(kāi)發(fā)環(huán)境搭建本節(jié)我們要學(xué)習(xí)Android開(kāi)發(fā)環(huán)境的搭建。在很早之前,Android項(xiàng)目都是用Eclipse+ADT插件作為開(kāi)發(fā)環(huán)境的,而在2013年谷歌推出了一款官方的IDE工具Android Studio,并且谷歌宣布到2015年底不再對(duì)Eclipse提供支持服務(wù),Android Studio會(huì)全面替代Eclipse,因此本書(shū)的開(kāi)發(fā)環(huán)境選擇Android Studio。1.2 開(kāi)發(fā)環(huán)境搭建1.2.1 所需工具JDK:本書(shū)中的Android項(xiàng)目需要使用JDK8以上的版本才可進(jìn)行開(kāi)發(fā)。Android Studio:本書(shū)使用最新的Android Stu
4、dio已經(jīng)推出了3.3版本。Android SDK:Android SDK是谷歌提供的Android開(kāi)發(fā)工具包,被軟件開(kāi)發(fā)工程師用于為特定的軟件包、軟件框架、硬件平臺(tái)、操作系統(tǒng)等建立應(yīng)用軟件的開(kāi)發(fā)工具的集合。因此在開(kāi)發(fā)Android程序時(shí),我們需要通過(guò)引入該工具包來(lái)使用Android相關(guān)的API。1.2 開(kāi)發(fā)環(huán)境搭建1.2.2 Android Studio的安裝Android Studio安裝程序可以從中文社區(qū)進(jìn)行下載,下載地址是:http:/www.android-S/需要選擇Android Studio的安裝路徑:1.2 開(kāi)發(fā)環(huán)境搭建1.2.2 Android Studio的安裝后面就全部
5、保持默認(rèn)選項(xiàng),一直點(diǎn)擊Next即可完成安裝點(diǎn)擊Finsih按鈕來(lái)啟動(dòng)Android Studio,第一次啟動(dòng)會(huì)讓選擇是否導(dǎo)入之前Android Studio版本的配置,如果是首次安裝就選擇不導(dǎo)入即可1.2 開(kāi)發(fā)環(huán)境搭建1.2.2 Android Studio的安裝這里選擇Android Studio的安裝類(lèi)型,有Standard和Custom兩種。Standard表示所有都使用默認(rèn)配置,較為便捷;Custom則可根據(jù)用戶(hù)的特殊需求進(jìn)行自定義。為了方便,這里我們就選擇Standard類(lèi)型。1.2 開(kāi)發(fā)環(huán)境搭建1.2.2 Android Studio的安裝點(diǎn)擊Next進(jìn)入到界面樣式配置,可以選擇適
6、合自己的界面樣式。進(jìn)入界面后我們可以看到SDK默認(rèn)的安裝路徑,現(xiàn)在點(diǎn)擊Finish按鈕,配置工作就全部完成。1.2 開(kāi)發(fā)環(huán)境搭建1.2.2 Android Studio的安裝Android Studio第一次啟動(dòng)會(huì)嘗試聯(lián)網(wǎng)下載一些更新,等待更新完成后再點(diǎn)擊Finish按鈕就會(huì)進(jìn)入Android Studio的歡迎界面。Android Studio的安裝已經(jīng)全部搭建完成。1.3 創(chuàng)建第一個(gè)Android項(xiàng)目1.3.1 創(chuàng)建Hello World項(xiàng)目在Android Studio歡迎界面點(diǎn)擊Start a new Android Studio project,會(huì)進(jìn)入到一個(gè)創(chuàng)建新項(xiàng)目的界面。1.3
7、創(chuàng)建第一個(gè)Android項(xiàng)目1.3.1 創(chuàng)建Hello World項(xiàng)目點(diǎn)擊Next按鈕進(jìn)入到Target Android Devices界面。接著點(diǎn)擊Next按鈕會(huì)跳轉(zhuǎn)到Add an activity to Mobile界面。1.3 創(chuàng)建第一個(gè)Android項(xiàng)目1.3.1 創(chuàng)建Hello World項(xiàng)目在Configure Activity界面中,我們可以給創(chuàng)建的活動(dòng)和布局命名。設(shè)置完成后單擊Finish按鈕,等待片刻,創(chuàng)建好的HelloWorld程序就會(huì)顯示在Android Studio中。1.3.2 創(chuàng)建模擬器單擊工具欄中的AVD Manager按鈕 ,進(jìn)入到Y(jié)our Virtual De
8、vices界面。目前我們的模擬器列表中還是空的,單擊Create Virtual Device按鈕后會(huì)進(jìn)入Select Hardware界面。選擇尺寸合適的模擬器。1.3 創(chuàng)建第一個(gè)Android項(xiàng)目1.3 創(chuàng)建第一個(gè)Android項(xiàng)目1.3.2 創(chuàng)建模擬器選擇屏幕尺寸為4.95的Nexus5模擬器為例,單擊Next按鈕,進(jìn)入System Image界面。多種操作系統(tǒng)的版本可以下載,我們選擇最新的Android9.0系統(tǒng),點(diǎn)擊Next 進(jìn)入Android Virtual Device(AVD)界面。1.3 創(chuàng)建第一個(gè)Android項(xiàng)目1.3.2 創(chuàng)建模擬器設(shè)置完成之后單擊Finish按鈕完成模
9、擬器創(chuàng)建,會(huì)返回到Y(jié)our Virtual Devices界面,同時(shí)模擬器列表里也會(huì)顯示剛剛創(chuàng)建好的模擬器。點(diǎn)擊Actions欄目中最左邊的三角形按鈕即可啟動(dòng)模擬器,跟正常手機(jī)一樣,有開(kāi)機(jī)啟動(dòng)界面,啟動(dòng)完成之后的界面。1.3 創(chuàng)建第一個(gè)Android項(xiàng)目1.3.3 運(yùn)行HelloWorld模擬器開(kāi)啟成功之后,接下來(lái)我們將HelloWorld項(xiàng)目部署到模擬器上運(yùn)行。單擊Android Studio工具欄中的運(yùn)行按鈕,會(huì)進(jìn)入到Select Deployment Target界面。單擊OK按鈕,我們可以看到運(yùn)行結(jié)果。1.3 創(chuàng)建第一個(gè)Android項(xiàng)目1.3.3 運(yùn)行HelloWorld1.3 創(chuàng)建
10、第一個(gè)Android項(xiàng)目1.3.4 分析Android程序結(jié)構(gòu)Android程序由多個(gè)文件以及文件夾組成,每個(gè)文件都用于不同的功能。用于存放AndroidManifest.xml文件,也稱(chēng)作清單文件用于存放所有的Java代碼,在該文件夾中可以創(chuàng)建多個(gè)包用于存放項(xiàng)目中使用到的所有圖片、布局、字符串等資源用于存放項(xiàng)目構(gòu)建的相關(guān)文件,無(wú)須修改1.4 工具使用日志工具Android中的應(yīng)用運(yùn)行在一個(gè)單獨(dú)的設(shè)備中,應(yīng)用的調(diào)試信息會(huì)輸出到設(shè)備單獨(dú)的日志緩沖區(qū)中,想要從設(shè)備日志緩沖區(qū)中取出信息,就要學(xué)會(huì)Android中日志工具的使用方法。Android中采用android.util.Log類(lèi)的靜態(tài)方法實(shí)現(xiàn)輸
11、出程序信息,通過(guò)Log類(lèi)輸出的日志信息分為6個(gè)級(jí)別。由低到高分別是Verbose、Debug、Info、Warning、Error、Assert,前5個(gè)級(jí)別分別對(duì)應(yīng)Log類(lèi)中的Log.v( )、Log.d( )、Log.i( )、Log.w( )、Log.e( )、Log.wtf( )靜態(tài)方法。1.4 工具使用日志工具LogCat過(guò)濾器共有6個(gè)條目,每個(gè)條目都有特定的功能。- Filter Name:過(guò)濾器的名稱(chēng),根據(jù)需求自定義即可。- Log Tag:根據(jù)定義的Tag過(guò)濾信息,通常使用類(lèi)名。- Log Message:根據(jù)輸出的內(nèi)容過(guò)濾信息。- Package Name:根據(jù)包名過(guò)濾信息。-
12、 PID:根據(jù)進(jìn)程ID過(guò)濾信息。- Log Level:根據(jù)日志的級(jí)別過(guò)濾信息。1.5 小結(jié)本章主要介紹了Android的基礎(chǔ)知識(shí),首先對(duì)Android系統(tǒng)有了更加充足的認(rèn)實(shí),然后成功將Android開(kāi)發(fā)環(huán)境搭建起來(lái),最后創(chuàng)建了第一個(gè)Android項(xiàng)目,并對(duì)Android項(xiàng)目的目錄結(jié)構(gòu)和執(zhí)行過(guò)程進(jìn)行了學(xué)習(xí),還介紹了如何使用Android日志工具,為后面的學(xué)習(xí)打好基礎(chǔ)。THANKS!第二章 探究活動(dòng)2.1 什么是活動(dòng)2.5 使用Intent在活動(dòng)中穿梭2.3 活動(dòng)的啟動(dòng)模式2.7 小結(jié)2.6 使用Intent傳遞數(shù)據(jù)2.2 活動(dòng)的生命周期2.4 活動(dòng)的基本用法2.1 什么是活動(dòng)活動(dòng)(Activi
13、ty)就是我們要學(xué)習(xí)的第一個(gè)組件?;顒?dòng)(Activity)為用戶(hù)提供可視化界面及操作,負(fù)責(zé)管理Android程序的用戶(hù)界面。一個(gè)應(yīng)用程序通常包含多個(gè)活動(dòng)(Activity),每個(gè)活動(dòng)(Activity)負(fù)責(zé)管理一個(gè)用戶(hù)界面,在每個(gè)界面里可以添加多個(gè)控件來(lái)實(shí)現(xiàn)不同的功能。2.2 活動(dòng)的生命周期在Android程序中,大部分組件都有自己的生命周期。掌握活動(dòng)(Activity)的生命周期在Android學(xué)習(xí)中非常重要,活動(dòng)(Activity)的生命周期包含了4種狀態(tài),活動(dòng)(Activity)類(lèi)中定義了7個(gè)回調(diào)方法,覆蓋了生命周期的每一個(gè)狀態(tài)。2.2 活動(dòng)的生命周期2.2.1 生命周期的狀態(tài)活動(dòng)(Ac
14、tivity)生命周期指的是從創(chuàng)建到銷(xiāo)毀的全過(guò)程。每個(gè)活動(dòng)(Activity)在其生命周期最多可能會(huì)有4種狀態(tài)Activity處于屏幕最前端,可與用戶(hù)進(jìn)行交互。Activity仍然可見(jiàn),但無(wú)法獲取焦點(diǎn),用戶(hù)對(duì)它操作沒(méi)有響應(yīng)。Activity完全不可見(jiàn),系統(tǒng)內(nèi)存不足時(shí)會(huì)銷(xiāo)毀該Activity。Activity將被清理出內(nèi)存。運(yùn)行狀態(tài)暫停狀態(tài)停止?fàn)顟B(tài)銷(xiāo)毀狀態(tài)2.2 活動(dòng)的生命周期2.2.2 生命周期方法在Activity創(chuàng)建時(shí)調(diào)用在Activity即將可見(jiàn)時(shí)調(diào)用Activity獲取焦點(diǎn)開(kāi)始與用戶(hù)交互當(dāng)前Activity被其他Activity覆蓋時(shí)調(diào)用Activity對(duì)用戶(hù)不可見(jiàn)時(shí)調(diào)用Activit
15、y銷(xiāo)毀時(shí)調(diào)用Activity從停止?fàn)顟B(tài)再次啟動(dòng)時(shí)調(diào)用2.3 活動(dòng)的啟動(dòng)模式2.3.1 活動(dòng)中的任務(wù)棧棧是一種“先進(jìn)后出”的數(shù)據(jù)結(jié)構(gòu)。Android中,采用任務(wù)棧的形式來(lái)管理Activity。啟動(dòng)Activity 2啟動(dòng)Activity 3Activity 3Activity 3任務(wù)棧Activity 1Activity 2停止Activity 32.3 活動(dòng)的啟動(dòng)模式2.3.2 活動(dòng)的四種啟動(dòng)模式standard模式是Activity的默認(rèn)啟動(dòng)方式,每啟動(dòng)一個(gè)Activity就會(huì)在棧頂創(chuàng)建一個(gè)新的實(shí)例。啟動(dòng)Activity 3任務(wù)棧任務(wù)棧Activity 1啟動(dòng)Activity 2Activi
16、ty 2Activity 32.3 活動(dòng)的啟動(dòng)模式2.3.2 活動(dòng)的四種啟動(dòng)模式singleTop模式會(huì)判斷要啟動(dòng)的Activity實(shí)例是否位于棧頂,如果位于棧頂則直接復(fù)用,否則創(chuàng)建新的實(shí)例。啟動(dòng)Activity 2Activity 2不在棧頂,需要?jiǎng)?chuàng)建新的Activity啟動(dòng)Activity 3Activity 3位于棧頂,直接復(fù)用,不需要?jiǎng)?chuàng)建新的Activity任務(wù)棧Activity 1Activity 2Activity 3Activity 22.3 活動(dòng)的啟動(dòng)模式2.3.2 活動(dòng)的四種啟動(dòng)模式singleTask模式下每次啟動(dòng)該Activity時(shí),系統(tǒng)首先會(huì)檢查棧中是否存在當(dāng)前Acti
17、vity實(shí)例,如果存在則直接使用,并把當(dāng)前Activity之上的所有實(shí)例全部出棧。Activity 3Activity 3Activity 4Activity 4啟動(dòng)Activity 2任務(wù)棧中有Activity 2,則直接使用,并將Activity 2之上的所有Activity移除任務(wù)棧Activity 1Activity 2移除Activity 3和Activity 42.3 活動(dòng)的啟動(dòng)模式2.3.2 活動(dòng)的四種啟動(dòng)模式singleInstance模式會(huì)啟動(dòng)一個(gè)新的任務(wù)棧來(lái)管理Activity實(shí)例,無(wú)論從哪個(gè)任務(wù)棧中啟動(dòng)該Activity,該實(shí)例在整個(gè)系統(tǒng)中只有一個(gè)。任務(wù)棧AActivit
18、y 1Activity 2啟動(dòng)Activity 3任務(wù)棧B創(chuàng)建新任務(wù)棧B用于管理Activity3Activity 32.4 活動(dòng)的基本用法2.4.1 活動(dòng)的創(chuàng)建在程序的包名出單擊右鍵,選擇NEWActivityEmpty Activity選項(xiàng),填寫(xiě)Activity信息,完成創(chuàng)建。2.4 活動(dòng)的基本用法2.4.2在AndroidManifest文件中注冊(cè)打開(kāi)AndroidManifest.xml文件進(jìn)行查看新的Activity注冊(cè)2.5 使用Intent在活動(dòng)中穿梭2.5.1 Intent介紹Intent也被稱(chēng)作意圖,是程序中各組件進(jìn)行交互的一種常用方式,Intent不僅可以指定當(dāng)前組件要執(zhí)行
19、的動(dòng)作,還可以在不同組件之間進(jìn)行數(shù)據(jù)傳遞。一般用于啟動(dòng)活動(dòng)、服務(wù)和發(fā)送廣播等。根據(jù)開(kāi)啟目標(biāo)組件的方式不同,Intent大致被分為兩種:顯式Intent和隱式Intent。2.5 使用Intent在活動(dòng)中穿梭2.5.1 Intent介紹顯式意圖隱式意圖顯式意圖可以直接通過(guò)名稱(chēng)開(kāi)啟指定的目標(biāo)組件隱式意圖通過(guò)指定action和category等屬性,系統(tǒng)根據(jù)這些信息進(jìn)行分析后尋找目標(biāo)Activity2.5 使用Intent在活動(dòng)中穿梭顯示意圖創(chuàng)建一個(gè)Intent對(duì)象,其中第1個(gè)參數(shù)為Context表示當(dāng)前的Activity對(duì)象,第2個(gè)參數(shù)表示要啟動(dòng)的目標(biāo)Activity。調(diào)用Activity的sta
20、rtActivity方法啟動(dòng)目標(biāo)組件2.5 使用Intent在活動(dòng)中穿梭隱式意圖設(shè)置action動(dòng)作,當(dāng)與清單文件中的action相匹配時(shí)啟動(dòng)目標(biāo)組件。設(shè)置action動(dòng)作,當(dāng)與代碼中的action與該action相匹配時(shí)啟動(dòng)該組件。2.5 使用Intent在活動(dòng)中穿梭2.5.2 隱式意圖的應(yīng)用23功能描述:技術(shù)要點(diǎn):AndroidStudio中選擇【File】【New】【New Project】選項(xiàng)創(chuàng)建項(xiàng)目點(diǎn)擊工具欄中【AVD Manager】按鈕啟動(dòng)模擬器點(diǎn)擊工具欄中的運(yùn)行按鈕運(yùn)行程序案例代碼(詳見(jiàn)教材P29P30)實(shí)現(xiàn)步驟: 打開(kāi)Android Studio首頁(yè)。使用AndroidStu
21、dio創(chuàng)建程序,使用模擬器運(yùn)行程序并通過(guò)隱式意圖打開(kāi)首頁(yè)。12.6 使用Intent傳遞數(shù)據(jù)2.6.1 數(shù)據(jù)傳遞Activity之間傳遞數(shù)據(jù)需要用到Intent提供的putExtra()方法。在MainActivity中放入數(shù)據(jù)傳遞給Main2Activity。在Main2Activity中獲取MainActivity中傳遞的數(shù)據(jù)。2.6 使用Intent傳遞數(shù)據(jù)2.6.2 數(shù)據(jù)回傳Activity中提供了一個(gè)startActivityForResult( Intent intent,int requestCode)方法也是用來(lái)啟動(dòng)活動(dòng)的,并且這個(gè)方法可以在當(dāng)前活動(dòng)被銷(xiāo)毀時(shí)返回一個(gè)結(jié)果給上一個(gè)
22、活動(dòng)。在MainActivity中開(kāi)啟Main2Activity在Main2Activity中添加返回?cái)?shù)據(jù)2.6 使用Intent傳遞數(shù)據(jù)2.6.2 數(shù)據(jù)回傳在Main2Activity被銷(xiāo)毀之后會(huì)回調(diào)MainActivity的onActivityResult( )方法,因此需要在MainActivity中重寫(xiě)onActivityResult( )方法來(lái)得到返回的數(shù)據(jù)。重寫(xiě)onActivityResult()方法獲得返回?cái)?shù)據(jù)2.6 使用Intent傳遞數(shù)據(jù)2.6.3 綜合案例23功能描述:技術(shù)要點(diǎn):新建名片界面的設(shè)計(jì)與實(shí)現(xiàn)數(shù)據(jù)展示界面的設(shè)計(jì)與實(shí)現(xiàn)名片界面邏輯代碼的設(shè)計(jì)與實(shí)現(xiàn)數(shù)據(jù)展示界面邏輯代碼
23、的設(shè)計(jì)與實(shí)現(xiàn)案例代碼(詳見(jiàn)教材P32P41)實(shí)現(xiàn)步驟: 新建聯(lián)系人實(shí)現(xiàn)數(shù)據(jù)回傳。使用Intent傳遞數(shù)據(jù),獲取Intent中的數(shù)據(jù)。12.7 小結(jié)本章主要介紹了關(guān)于活動(dòng)所有重要的知識(shí)點(diǎn),包括活動(dòng)的基本用法、啟動(dòng)活動(dòng)、傳遞數(shù)據(jù)的方法、活動(dòng)的生命周期以及活動(dòng)的啟動(dòng)模式;活動(dòng)作為Android的四大組件之一,在應(yīng)用程序中凡是有界面的都會(huì)使用到活動(dòng),因此必須熟練掌握該組件的使用。THANKS!第三章 Android UI 基礎(chǔ)知識(shí)3.1 編寫(xiě)程序界面3.5 ListView控件詳解3.3 四種基本布局3.6 強(qiáng)大的滾動(dòng)控件RecylerView控件3.2 常用控件3.4 約束布局3.7 小結(jié)3.1 編
24、寫(xiě)程序界面Android中有多種編寫(xiě)程序界面的方式可供選擇,比如Android Stuido和Eclipse中都提供了相對(duì)應(yīng)的可視化編輯器,允許使用拖拽控件的方式來(lái)編寫(xiě)布局,并可以在視圖上直接修改控件的屬性。通常Android開(kāi)發(fā)者不使用上述方式去編寫(xiě)界面,因?yàn)榭梢暬庉嫻ぞ卟⒉荒軒椭_(kāi)發(fā)者去真正了解界面底層的實(shí)現(xiàn)原理;而且通過(guò)這種方式制作出的界面通常不具有良好的屏幕適配性,當(dāng)需要編寫(xiě)較為復(fù)雜的界面時(shí),可視化編輯工具就很難勝任。因此建議所有的界面都通過(guò)最基本的方式去實(shí)現(xiàn),也就是編寫(xiě)XML代碼,熟悉并掌握了XML代碼編寫(xiě)界面之后,不僅可以實(shí)現(xiàn)復(fù)雜的界面,還可以分析和修改當(dāng)前現(xiàn)有界面。3.2 常用
25、控件控件作為界面組成的主要元素。Android系統(tǒng)提供了大量的UI控件,這些界面可以與用戶(hù)直接進(jìn)行交互,例如TextView(文本框)、EditText(編輯框)、Button(按鈕)等,合理地使用這些控件就可以非常輕松地編寫(xiě)出美觀的界面。本節(jié)將學(xué)習(xí)Android中常用控件的使用方法。 3.2 常用控件3.2.1 TextView控件TextView作為Android中最簡(jiǎn)單最常用的一個(gè)控件,用來(lái)在界面顯示文本信息,TextView控件屬性較多,開(kāi)發(fā)者可以通過(guò)設(shè)置屬性值來(lái)修改文本的字體大小、顏色、樣式等。設(shè)置控件寬度設(shè)置控件高度設(shè)置文字大小設(shè)置文本信息設(shè)置控件居中設(shè)置文本顏色3.2 常用控件3
26、.2.2 EditText控件EditText控件是程序用于和用戶(hù)進(jìn)行交互的一個(gè)重要控件,用戶(hù)經(jīng)常會(huì)向程序中輸入數(shù)據(jù),此時(shí)就需使用文本編輯控件EditText,它允許用戶(hù)在控件里輸入和編輯內(nèi)容,并且可以在程序中對(duì)這些內(nèi)容進(jìn)行處理。設(shè)置最大行數(shù)設(shè)置提示信息設(shè)置文本顏色、大小、樣式 繼承自TextView的屬性3.2 常用控件3.2.3 Button控件Button是程序和用戶(hù)進(jìn)行交互時(shí)必不可少的控件,它的作用是用于響應(yīng)用戶(hù)的一系列點(diǎn)擊事件。設(shè)置按鈕名稱(chēng)設(shè)置唯一標(biāo)識(shí)設(shè)置點(diǎn)擊事件3.2 常用控件點(diǎn)擊事件實(shí)現(xiàn)方式獨(dú)立類(lèi)方式- 指定Button的onClick屬性方式-在Activity中實(shí)現(xiàn)這個(gè)cli
27、ck方法android:onClick=click public void click(View view) btn1.setText(按鈕1已經(jīng)被點(diǎn)擊!); 3.2 常用控件點(diǎn)擊事件實(shí)現(xiàn)方式匿名內(nèi)部類(lèi)方式- 在Activity中添加匿名內(nèi)部類(lèi)btn2.setOnClickListener(new View.OnClickListener() Override public void onClick(View v) btn2.setText(按鈕2已經(jīng)被點(diǎn)擊!); );3.2 常用控件點(diǎn)擊事件實(shí)現(xiàn)方式接口方式- 在當(dāng)前Activity中實(shí)現(xiàn)OnClickListener接口-實(shí)現(xiàn)接口方法-綁定
28、到Button按鈕上public class MainActivity extends AppCompatActivity implements View.OnClickListener Override public void onClick(View v) btn1.setOnClickListener(this); 3.2 常用控件3.2.4 ImageView控件ImageView控件用于在界面上展示圖片,可以讓程序界面變得更加豐富多彩。設(shè)置背景圖片3.2 常用控件3.2.5 RadioButton控件RadioButton是單選按鈕,必須與RadioGroup配合使用,提供兩個(gè)或者多
29、個(gè)互斥的選項(xiàng)及。而RadioGroup是單選組合框,可以容納多個(gè)RadioButton,實(shí)現(xiàn)單選狀態(tài)。 3.2 常用控件3.2.5 RadioButton控件設(shè)置RadioButton按鈕的排列方向3.2 常用控件3.2.5 RadioButton控件為RadioGruop設(shè)置監(jiān)聽(tīng)事件的方法是setOnCheckedChangeListener( ),要與Button中的setOnClickListener( )區(qū)分開(kāi)。 rdg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() Override public
30、 void onCheckedChanged(RadioGroup group, int checkedId) if (checkedId=R.id.rdb) tv_content.setText(您選擇的性別是:男性); else tv_content.setText(您選擇的性別是:女性); );3.2 常用控件3.2.6 Toast控件Toast也稱(chēng)為消息對(duì)話(huà)框,它是Android系統(tǒng)提供的一種非常友好的輕量級(jí)信息提醒機(jī)制,在程序中可以使用它將一些短小的信息通知給用戶(hù),Toast對(duì)話(huà)框顯示在應(yīng)用程序界面的最上層,顯示一段時(shí)間后自動(dòng)消失,不會(huì)打斷當(dāng)前操作。由于Toast只起到提示作用,因此
31、多用于觸發(fā)事件的監(jiān)聽(tīng)中。創(chuàng)建消息對(duì)話(huà)框上下文對(duì)象提示信息顯示時(shí)間長(zhǎng)短顯示消息3.2 常用控件3.2.7 AlertDialog控件AlertDialog可以在當(dāng)前的界面彈出一個(gè)對(duì)話(huà)框,并且這個(gè)對(duì)話(huà)框是位于應(yīng)用程序界面的最上層,具有確定和取消按鈕創(chuàng)建實(shí)例并綁定當(dāng)前窗口設(shè)置圖標(biāo)設(shè)置對(duì)話(huà)框標(biāo)題及提示信息設(shè)置確定按鈕設(shè)置取消按鈕創(chuàng)建對(duì)話(huà)框顯示對(duì)話(huà)框3.2 常用控件3.2.8 ProgressDialog控件ProgressDialog會(huì)在對(duì)話(huà)框中顯示一個(gè)進(jìn)度條,在應(yīng)用程序?qū)崿F(xiàn)耗時(shí)操作時(shí)(如下載資源、獲取網(wǎng)絡(luò)圖片,加載視頻等)可以讓用戶(hù)耐心地等待。創(chuàng)建實(shí)例并綁定當(dāng)前窗口顯示進(jìn)度條對(duì)話(huà)框3.2 常用控件3
32、.2.9 ProgressBar控件ProgressBar是在Android UI界面中顯示一個(gè)進(jìn)度條,是一個(gè)非常實(shí)用的組件,通常用于向用戶(hù)顯示某個(gè)耗時(shí)操作完成的百分比。設(shè)置水平進(jìn)度條設(shè)置進(jìn)度條最大值為503.3 四種常用布局3.3.1 線(xiàn)性布局線(xiàn)性布局(LinearLayout)在實(shí)際開(kāi)發(fā)中使用最多,也相對(duì)簡(jiǎn)單,它會(huì)將控件在線(xiàn)性方向上依次排列,排列方式主要有水平和垂直兩種方式。3.3 四種常用布局通過(guò)android:orientation屬性控制控件的排列方向,android:orientation屬性有兩個(gè)值,分別是vertical和horizontal,其中vertical表示線(xiàn)性布局垂
33、直顯示,horizontal表示線(xiàn)性布局水平顯示,而且horizontal是線(xiàn)性布局默認(rèn)的排列方向。如果控件是水平排列,那么控件的android:layout_width屬性就只能設(shè)置為wrap_content如果控件是垂直排列,那么控件的android:layout_height屬性就不能設(shè)置為match_parent當(dāng)控件水平排列時(shí),如果控件未占滿(mǎn)一行,會(huì)留有空白區(qū)域,這樣既不美觀又浪費(fèi)空間。此時(shí),可以利用layout_weight屬性解決這個(gè)問(wèn)題,該屬性被稱(chēng)為權(quán)重,通過(guò)比例調(diào)整布局中所有控件的大小。3.3 四種常用布局3.3.2 相對(duì)布局相對(duì)布局(RelativeLayout)在程序開(kāi)發(fā)
34、中也很常見(jiàn),相較于線(xiàn)性布局按照線(xiàn)性方向排列控件,相對(duì)布局就顯得隨意一些,通過(guò)相對(duì)定位的方式指定控件位置,控件可以出現(xiàn)在布局中的任何地方,但是必須以其他控件或者父容器為參照物。3.3 四種常用布局3.3.2 相對(duì)布局屬性作用paddingTop指定布局頂部?jī)?nèi)邊距的距離paddingBottom指定布局底部?jī)?nèi)邊距的距離paddingLeft指定布局左側(cè)內(nèi)邊距的距離paddingRight指定布局右側(cè)內(nèi)邊距的距離padding指定布局四周內(nèi)邊距的距離layout_marginTop指定當(dāng)前控件上邊界與某控件的距離layout_marginBottom指定當(dāng)前控件下邊界與某控件的距離layout_ma
35、rginLeft指定當(dāng)前控件左邊界與某控件的距離layout_marginRight指定當(dāng)前控件右邊界與某控件的距離layout_centerInParent指定當(dāng)前控件位于父布局的中心位置layout_centerVertical指定當(dāng)前控件位于父布局的垂直居中位置layout_centerHorizontal指定當(dāng)前控件位于父布局的水平居中位置layout_above指定當(dāng)前控件位于某控件的上方layout_below指定當(dāng)前控件位于某控件的下方layout_toLeftOf指定當(dāng)前控件位于某控件的左側(cè)layout_toRightOf指定當(dāng)前控件位于某控件的右側(cè)layout_alignTo
36、p指定當(dāng)前控件的上邊界與某控件的上邊界對(duì)齊layout_alignBottom指定當(dāng)前控件的下邊界與某控件的下邊界對(duì)齊layout_alignLeft指定當(dāng)前控件的左邊界與某控件的左邊界對(duì)齊layout_alignRight指定當(dāng)前控件的右邊界與某控件的右邊界對(duì)齊3.3 四種常用布局3.3.3 幀布局幀布局(FrameLayout)就非常簡(jiǎn)單了。它有時(shí)也被稱(chēng)為層布局,該布局為每個(gè)添加的控件創(chuàng)建一個(gè)空白區(qū)域(稱(chēng)為一幀),從屏幕左上角按照層次堆疊方式擺放控件,后面的控件覆蓋前面的控件,先放入的控件顯示在最底層。幀布局中有兩個(gè)特殊屬性,一個(gè)是android:foregroud,用于設(shè)置幀布局容器的前
37、景圖像,這個(gè)圖像始終在所有子控件之上;另外一個(gè)是android:foregroundGravity,用于設(shè)置前景圖像顯示位置。3.3 四種常用布局3.3.4 表格布局表格布局(TableLayout)通過(guò)行和列將界面分為多個(gè)單元格,以行列的形式管理子控件,并且需要配合TableRow使用。每一行為一個(gè)TableRow的對(duì)象,因此TableRow的數(shù)量決定了表格的行數(shù)。TableRow中可以添加子控件,每添加一個(gè)為一列,因此表格的列數(shù)是由包含最多控件的TableRow決定的。3.3 四種常用布局3.3.4 表格布局 3.4 約束布局 約束布局(ConstraintLayout)是Android
38、Studio 2.2中主要的新增功能之一,它和傳統(tǒng)編寫(xiě)界面的方式恰恰相反,ConstraintLayout非常適合使用可視化的方式來(lái)編寫(xiě)界面,它的用法很多都是對(duì)控件進(jìn)行拖拽,但并不太適合使用XML的方式來(lái)進(jìn)行編寫(xiě)。從Android Studio 2.3版本開(kāi)始新建的Module中默認(rèn)的布局就是ConstraintLayout,本書(shū)使用的是更高版本的Android Studio3.2,所以在初次創(chuàng)建Moudle時(shí)需要將布局文件中的ConstraintLayout修改成自己所需要的布局即可。3.5 ListView控件詳解雖然現(xiàn)在手機(jī)屏幕變得越來(lái)越大,但是畢竟屏幕空間還是有限的,能夠一次性在屏幕上
39、顯示的內(nèi)容并不多。日常使用微信、微博、淘寶等程序時(shí),這些程序通常會(huì)在一個(gè)頁(yè)面顯示很多個(gè)條目,并且每個(gè)條目的布局風(fēng)格都一樣,這是通過(guò)Android中最常用的空間之一ListView實(shí)現(xiàn)的。3.5 ListView控件詳解3.5.1 ListView基礎(chǔ)用法在布局中添加ListView控件 3.5 ListView控件詳解在Activity中使用自定義數(shù)據(jù)適配器類(lèi)對(duì)ListView進(jìn)行數(shù)據(jù)適配 private class MyBaseAdapter extends BaseAdapter Override public int getCount() return data.length; Over
40、ride public Object getItem(int position) return dataposition; Override public long getItemId(int position) return position; Override public View getView(int position, View convertView, ViewGroup parent) TextView tv = tv = new TextView(MainActivity.this); tv.setText(dataposition); tv.setTextSize(40);
41、 return tv; 3.5 ListView控件詳解在Activity的onCreate()方法中進(jìn)行數(shù)據(jù)適配Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView listView =findViewById(R.id.list_view); MyBaseAdapter adapter = new MyBaseAdapter(); listView.setA
42、dapter(adapter); 3.5 ListView控件詳解3.5.2 ListView的定制界面ListView界面內(nèi)容要豐富的多,可以對(duì)Item條目進(jìn)行定制。創(chuàng)建ListView對(duì)應(yīng)的Item布局,顯示每個(gè)Item信息,Item中左側(cè)放置一個(gè)ImageView用于顯示圖標(biāo),右側(cè)放置一個(gè)TextView用于顯示文本信息3.5 ListView控件詳解3.5.3 ListView的優(yōu)化有多少個(gè)條目就會(huì)執(zhí)行多少次MyBaseAdapter類(lèi)中的getView( )方法。這樣的話(huà)如果展示的數(shù)據(jù)有成千上萬(wàn)條,getView( )方法也會(huì)被執(zhí)行成千上萬(wàn)次,相應(yīng)的也會(huì)創(chuàng)建成千上萬(wàn)個(gè)條目對(duì)象,這樣不
43、僅會(huì)增加內(nèi)存的消耗,而且當(dāng)ListView快速滾動(dòng)時(shí),很容易造成內(nèi)存溢出而導(dǎo)致程序崩潰。為了防止數(shù)據(jù)量過(guò)大造成內(nèi)存溢出,在使用ListView時(shí)通常會(huì)進(jìn)行優(yōu)化,其中一種是復(fù)用convertView。3.5 ListView控件詳解Item 5Item 4Item 3ListView控件Item 2向上滑動(dòng)Item 5Item 4Item 3ListView控件Item 2滑出屏幕的Item 1滑出屏幕的Item 1復(fù)用Item 1加載新內(nèi)容Item 3Item 4Item 5復(fù)用的Item 1滑出屏幕的Item 23.5 ListView控件詳解3.5.3 ListView的優(yōu)化在加載Item
44、布局時(shí),會(huì)使用findViewById()方法找到Item布局中的各個(gè)控件,在每一次加載新的Item數(shù)據(jù)時(shí)都會(huì)進(jìn)行控件尋找,這樣也會(huì)產(chǎn)生耗時(shí)操作。為了進(jìn)一步的優(yōu)化ListView減少耗時(shí)操作,可以將要加載的子View放在ViewHolder類(lèi)中,當(dāng)?shù)谝淮蝿?chuàng)建convertView時(shí)將這些控件找出,在第二次重用convertView時(shí)就可直接通過(guò)convertView中的getTag()方法獲得這些控件。3.5 ListView控件詳解3.5.4 ListView的點(diǎn)擊事件ListView也是有點(diǎn)擊事件的listView.setOnItemClickListener(new AdapterVie
45、w.OnItemClickListener() Override public void onItemClick(AdapterView parent, View view, int position, long id) Toast.makeText(MainActivity.this,您點(diǎn)擊了:+dataposition,Toast.LENGTH_SHORT).show(); );3.6強(qiáng)大的滾動(dòng)控件RecylerView 從Android 5.0開(kāi)始,谷歌公司推出了一個(gè)增強(qiáng)版的ListView新控件RecylerView,它不僅擁有與ListView相同的效果,而且對(duì)ListView中的不
46、足之處進(jìn)行了優(yōu)化。3.6.1 如何添加RecylerView控件打開(kāi)app/bulid.gradle文件,在dependencies閉包中添加dependencies implementation fileTree(dir: libs, include: *.jar) implementation com.android.support:appcompat-v7:28.0.0 implementation com.android.support:recyclerview-v7:28.0.0 implementation com.android.support.constraint:constr
47、aint-layout:1.1.3 testImplementation junit:junit:4.12 androidTestImplementation com.android.support.test:runner:1.0.2 androidTestImplementation com.android.support.test.espresso:espresso-core:強(qiáng)大的滾動(dòng)控件RecylerView在activity_main.xml中添加recyclerview控件 3.6強(qiáng)大的滾動(dòng)控件RecylerView3.6.2 RecyclerView的基礎(chǔ)用法在A
48、ctivity中進(jìn)行編寫(xiě)/用于指定recyclerView的布局方式,可以實(shí)現(xiàn)和ListView類(lèi)似的效果 LinearLayoutManager linearLayoutManager = new LinearLayoutManager(LinearLayoutManager.VERTICAL); recyclerView.setLayoutManager(linearLayoutManager); MyBaseAdapter adapter = new MyBaseAdapter();/設(shè)置數(shù)據(jù)適配器 recyclerView.setAdapter(adapter);3.6強(qiáng)大的滾動(dòng)控件R
49、ecylerView3.6.3 RecyclerView的點(diǎn)擊事件RecyclerView的Item布局中有兩個(gè)控件,當(dāng)用戶(hù)分別點(diǎn)擊兩個(gè)控件時(shí)會(huì)產(chǎn)生不同的事件 holder.textView.setOnClickListener(new View.OnClickListener() Override public void onClick(View v) int position=holder.getAdapterPosition(); Toast.makeText(getApplicationContext(),您點(diǎn)擊了文字+dataposition,Toast.LENGTH_SHORT).
50、show(); ); holder.imageView.setOnClickListener(new View.OnClickListener() Override public void onClick(View v) int position=holder.getAdapterPosition(); Toast.makeText(getApplicationContext(),您選擇了圖+dataposition,Toast.LENGTH_SHORT).show(); );3.7 小結(jié)本章主要介紹了Android UI基礎(chǔ),包括基本布局的用法、幾種常用的對(duì)話(huà)框、ListView以及Recy
51、lerView的使用,并通過(guò)相關(guān)案例將這些知識(shí)融合在一起。THANKS!第四章 碎片4.1 碎片是什么4.5 實(shí)戰(zhàn)演練新聞應(yīng)用4.3 碎片的生命周期4.6 小結(jié)4.2 碎片的使用方式4.4 動(dòng)態(tài)加載布局4.1 碎片是什么Fragment(碎片)是一種可以嵌入在活動(dòng)當(dāng)中的UI片段,它能夠讓程序更加合理和充分的利用大屏幕空間,在平板上應(yīng)用的更加廣泛。與活動(dòng)非常相似,同樣能夠包含布局,且同樣具有自己的生命周期??梢詫⑺槠斫獬蔀橐粋€(gè)迷你型的活動(dòng),雖然這個(gè)迷你型的活動(dòng)可能和普通活動(dòng)一樣大。在平板上更好的設(shè)計(jì)方式是將新聞標(biāo)題及內(nèi)容界面分開(kāi)放在兩個(gè)碎片中,充分利用屏幕空間。4.1 碎片是什么新聞1新聞2新
52、聞3新聞4新聞5新聞6內(nèi)容標(biāo)題碎片1碎片24.2 碎片的使用方式4.2.1 碎片的簡(jiǎn)單用法創(chuàng)建在程序包名處單擊鼠標(biāo)右鍵,選擇【New】【Fragment】【Fragment(Blank)】進(jìn)入Configure Component界面,在該界面指定Fragment名稱(chēng),并選擇是否生成Fragment對(duì)應(yīng)布局文件即可4.2 碎片的使用方式Fragment創(chuàng)建完畢后通常會(huì)默認(rèn)創(chuàng)建一個(gè)構(gòu)造方法并重寫(xiě)onCreateView()方法public class BlankFragment extends Fragment public BlankFragment() / Required empty pu
53、blic constructor Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) / Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_blank, container, false); 4.2 碎片的使用方式通過(guò)最簡(jiǎn)單的碎片示例來(lái)了解碎片的內(nèi)容,在一個(gè)活動(dòng)中添加兩個(gè)碎片,并讓兩個(gè)碎片平分活動(dòng)空間。4.2 碎片的使用方式4.
54、2.2 碎片的動(dòng)態(tài)加載碎片真正的強(qiáng)大之處在于,你可以在程序運(yùn)行時(shí)根據(jù)具體情況動(dòng)態(tài)的將碎片添加到活動(dòng)中,將程序界面定制得更加多樣化。通過(guò)編輯MainActivity實(shí)現(xiàn)動(dòng)態(tài)的向FrameLayout中添加內(nèi)容最終實(shí)現(xiàn)動(dòng)態(tài)添加碎片的功能。4.2 碎片的使用方式動(dòng)態(tài)加載過(guò)程首先為左側(cè)碎片中的按鈕注冊(cè)點(diǎn)擊事件;接下來(lái)調(diào)用replaceFragment()方法動(dòng)態(tài)添加RightFragment碎片;從replaceFragment()方法中可以總結(jié)出,動(dòng)態(tài)添加碎片的5個(gè)步驟:(1)創(chuàng)建待添加碎片的實(shí)例。(2)通過(guò)調(diào)用getSupportFragmentManager()方法獲取FragmentManag
55、er。(3)通過(guò)調(diào)用beginTransaction()開(kāi)啟事務(wù)。(4)使用replace()方法實(shí)現(xiàn)向容器中添加或替換碎片,需要傳入容器的id和待添加碎片的實(shí)例。(5)通過(guò)使用commit()方法提交事務(wù)。4.2 碎片的使用方式4.2 碎片的使用方式4.2.3 在碎片中返回FragmentTransaction中提供了一個(gè)addToBackStack()方法,用于將一個(gè)事務(wù)添加到返回棧中。public class MainActivity extends AppCompatActivity implements View.OnClickListener . private void repl
56、aceFragment(Fragment fragment) FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.replace(R.id.right_layout,fragment); transaction.addToBackStack(null); mit(); 4.2 碎片的使用方式4.2.4 碎片與活動(dòng)之間的通信為了方便碎片與活動(dòng)之間的通信,F(xiàn)rag
57、mentManager提供了一個(gè)類(lèi)似于findViewById()的方法findFragmentById()專(zhuān)門(mén)用于從布局文件中獲取碎片實(shí)例,之后就可以輕松調(diào)用碎片中的方法了。RightFragment rightFragment = (RightFragment)getSupportFragmentManager().findFragmentById(R.id.right_layout);4.3 碎片的生命周期Fragment CallbacksonAttach()onCreate()onCreateView()OnAvtivityCreated()onStart()onResume()on
58、Pause()onStop()onDestroyView()onDestroy()onDetach()Activity StateCreatedStartedResumedPausedStoptedDestroyed碎片的生命周期與活動(dòng)的生命周期非常相似,但是碎片比活動(dòng)多5種回調(diào)方法以覆蓋碎片生命周期的每個(gè)環(huán)節(jié),具體說(shuō)明如下:onAttach()。碎片與活動(dòng)建立關(guān)聯(lián)時(shí)調(diào)用。onCreateView()。為碎片創(chuàng)建視圖(加載布局)時(shí)調(diào)用。onActivityCreated()。當(dāng)與碎片相關(guān)聯(lián)的活動(dòng)的onCreate()方法返回,即活動(dòng)已經(jīng)創(chuàng)建完畢時(shí)調(diào)用。onDestroyView()。當(dāng)該碎片的
59、試圖被移除時(shí)調(diào)用。onDetach()。當(dāng)碎片與活動(dòng)解除關(guān)聯(lián)時(shí)調(diào)用。4.4 動(dòng)態(tài)加載布局4.4.1 限定符的使用如何讓程序在運(yùn)行時(shí)判斷使用雙頁(yè)模式還是單頁(yè)模式呢?此時(shí)需要借助限定符(Qualifiers)來(lái)實(shí)現(xiàn)。刪掉多余代碼,僅留左側(cè)布局并讓它充滿(mǎn)整個(gè)父布局。接下來(lái),在res目錄上點(diǎn)擊右鍵選擇【New】【Android Resource Directory】新建layout-large文件夾4.4 動(dòng)態(tài)加載布局在這個(gè)文件夾下新建布局也叫做activity_main.xml在layout/activity_main布局中只包含了一個(gè)碎片也就是單頁(yè)模式,在layout-large/activity
60、_main布局中包含了兩個(gè)碎片,即雙頁(yè)模式修改MainActivity中的代碼,注釋掉replaceFragment()方法中的代碼,重新運(yùn)行程序4.4 動(dòng)態(tài)加載布局Android中一些常見(jiàn)的限定符可以參考下表。屏幕特征限定符描述大小small提供給小屏幕設(shè)備的資源normal提供給中等屏 幕設(shè)備的資源large提供給大屏幕設(shè)備的資源xlarge提供給超大屏幕設(shè)備的資源分辨率ldpi提供給低分辨率設(shè)備的資源mdpi提供給中等分辨率設(shè)備的資源hdpi提供給高分辨率設(shè)備的資源xhdpi提供給超高分辨率設(shè)備的資源xxhdpi提供給超超高分辨率設(shè)備的資源方向land提供給橫屏設(shè)備的資源port提供給豎
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《脊柱的運(yùn)動(dòng)解剖》課件
- 第6單元 科技文化與社會(huì)生活(A卷·知識(shí)通關(guān)練)(解析版)
- 中華傳統(tǒng)文化宣傳教育2
- 雙十二時(shí)尚之道
- 駛向輝煌共創(chuàng)精彩
- 音樂(lè)制作師勞動(dòng)合同三篇
- 深部護(hù)理科護(hù)士的工作總結(jié)
- 競(jìng)選班干部的演講稿模板集錦八篇
- 2023年-2024年安全管理人員安全教育培訓(xùn)試題附答案(A卷)
- 2024年企業(yè)主要負(fù)責(zé)人安全培訓(xùn)考試題附參考答案【突破訓(xùn)練】
- 幼兒園講解海軍知識(shí)新版ppt
- T∕CDHA 9-2022 熱力管道安全評(píng)估方法
- 試驗(yàn)前準(zhǔn)備狀態(tài)檢查報(bào)告
- 理正深基坑之鋼板樁受力計(jì)算
- 國(guó)家開(kāi)放大學(xué)電大專(zhuān)科《中國(guó)當(dāng)代文學(xué)》期末試題及答案
- 廣東話(huà)粵語(yǔ)姓名拼音大全
- 閘門(mén)及啟閉機(jī)安裝專(zhuān)項(xiàng)施工方案
- 應(yīng)征公民體格檢查表(征兵)
- 鋼筋位置及保護(hù)層厚度檢測(cè)ppt課件
- 巖石堅(jiān)固性和穩(wěn)定性分級(jí)表
- CNC程序控制管理辦法
評(píng)論
0/150
提交評(píng)論