Android應(yīng)用開發(fā)基礎(chǔ)教程(微課版) 課件 鄧永生 第1-4章 Android基礎(chǔ)- Activity_第1頁
Android應(yīng)用開發(fā)基礎(chǔ)教程(微課版) 課件 鄧永生 第1-4章 Android基礎(chǔ)- Activity_第2頁
Android應(yīng)用開發(fā)基礎(chǔ)教程(微課版) 課件 鄧永生 第1-4章 Android基礎(chǔ)- Activity_第3頁
Android應(yīng)用開發(fā)基礎(chǔ)教程(微課版) 課件 鄧永生 第1-4章 Android基礎(chǔ)- Activity_第4頁
Android應(yīng)用開發(fā)基礎(chǔ)教程(微課版) 課件 鄧永生 第1-4章 Android基礎(chǔ)- Activity_第5頁
已閱讀5頁,還剩196頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

Andriod應(yīng)用開發(fā)基礎(chǔ)教程平時成績:40%(出勤、作業(yè)、課堂表現(xiàn)等)期末實(shí)踐考核:30%(綜合性項目)期末試卷考核:30%(紙質(zhì)試卷)成績構(gòu)成課程內(nèi)容1Android基礎(chǔ)2常用布局3常用控件與消息處理4Activity5數(shù)據(jù)存儲6ContentProvider7廣播8Service9網(wǎng)絡(luò)編程10高級應(yīng)用第1章Android基礎(chǔ)1.1Android的起源和發(fā)展1.2Android的系統(tǒng)構(gòu)架1.3Android平臺優(yōu)勢和劣勢1.4Android開發(fā)環(huán)境搭建

Android(安卓)是一種基于Linux的開源操作系統(tǒng),由Google公司和開放手機(jī)聯(lián)盟領(lǐng)導(dǎo)及開發(fā),主要用于移動終端設(shè)備,如智能手機(jī)、平板電腦等。

什么是Android?(1)Android

(2)iOS

(3)WindowsPhone(4)BlackBerryOS(黑莓)

(5)Symbian(塞班)

(6)

HarmonyOS(鴻蒙)

移動互聯(lián)的快速發(fā)展離不開智能手機(jī)操作系統(tǒng),常用的智能手機(jī)操作系統(tǒng)包括以下幾種:1.1Android的起源和發(fā)展1.1.1Android的起源1.1.2Android的發(fā)展1.1.1Android的起源

1886年法國作家AugusteVilliersdel'Isle-Adam(耶·德·利爾-阿達(dá)姆·利爾亞當(dāng))在科幻小說《L'èvefuture(未來夏娃)》中,他把外表像人的機(jī)器人取名為Android,這個詞本意是“機(jī)器人”,這是Android一詞最早出現(xiàn)在公眾視野。2003年,AndyRubin創(chuàng)立了Android公司。AndroidLOGO的設(shè)計者繪制了一個簡單的機(jī)器人,它的軀干就像錫罐的形狀,頭上還有兩根天線。Android圖標(biāo)1.1.1.2Android的發(fā)展史

2003年10月,Android系統(tǒng)由AndyRubin等人創(chuàng)立2005年8月,Google收購了Android及其團(tuán)隊,AndyRubin成為Google公司工程部副總裁,繼續(xù)負(fù)責(zé)Android項目2007年11月,Google公司正式對外展示了Android操作系統(tǒng),并宣布與多家制造商共同研發(fā)改良Android系統(tǒng)2008年9月,Google公司正式發(fā)布了Android1.0系統(tǒng),代號Astro(鐵臂阿童木),這是Android系統(tǒng)最早的版本2008年10月,首款搭載安卓系統(tǒng)的設(shè)備HTCG1(也稱為T-MobileG1)上市。HTCG1是一款具有全鍵盤設(shè)計的智能手機(jī),標(biāo)志著安卓系統(tǒng)正式進(jìn)入公眾視野Android最早的兩個內(nèi)部測試版本是以機(jī)器人名稱來命名:AstroBoy(鐵臂阿童木)和Bender(發(fā)條機(jī)器人),后因版權(quán)問題,從2009年Android1.5開始,谷歌將甜點(diǎn)作為Android系統(tǒng)版本代號,2019年Google官方宣布結(jié)束以甜點(diǎn)命名Android系統(tǒng)的方式,版本的內(nèi)部代號仍以甜點(diǎn)命名。1.2Android的系統(tǒng)構(gòu)架1.2Android的系統(tǒng)構(gòu)架

1、應(yīng)用層(Applications):應(yīng)用層是Android系統(tǒng)的頂層,包括了各種預(yù)裝和第三方應(yīng)用程序,如電子郵件、瀏覽器、照相機(jī)、聯(lián)系人等等。2、應(yīng)用框架層(ApplicationFramework):開發(fā)人員可以訪問核心應(yīng)用程序所使用的API框架,是我們從事Android開發(fā)的基礎(chǔ),很多核心應(yīng)用程序也是通過這一層來實(shí)現(xiàn)其核心功能的,開發(fā)人員可以直接使用其提供的組件來進(jìn)行快速的應(yīng)用程序開發(fā),如Activity、Service、ContentProvider、BroadcastReceiver等。3、系統(tǒng)運(yùn)行庫層(Libraries):Android包含一些C/C++庫,這些庫能被Android系統(tǒng)中不同的組件使用,它們通過Android應(yīng)用程序框架為開發(fā)者提供服務(wù)。其中,核心庫包括系統(tǒng)C庫(專門為基于EmbeddedLinux的設(shè)備定制)、媒體庫(支持多種常用的音頻、視頻格式回放和錄制,同時支持靜態(tài)圖像文件)、SurfaceManager(管理顯示子系統(tǒng))、LibWebCore(web瀏覽器引擎)。4、Linux內(nèi)核層(LinuxKernel):Android平臺的基礎(chǔ)是Linux內(nèi)核,Android的Linuxkernel控制包括安全性,內(nèi)存管理,進(jìn)程管理,網(wǎng)絡(luò)協(xié)議棧和驅(qū)動模型等。Linux內(nèi)核也同時作為硬件和軟件棧之間的抽象層。1.3

Android平臺優(yōu)勢和劣勢

Android平臺優(yōu)勢包括以下幾點(diǎn):1、Android系統(tǒng)可搭載多種設(shè)備,如智能手表等可穿戴式設(shè)備、手機(jī)、平板電腦、電視、車輛儀表板、智能家居等,設(shè)備和屏幕兼容性較好。2、在安全性方面,用戶在進(jìn)行下載應(yīng)用、瀏覽網(wǎng)頁和分享數(shù)據(jù)、接收來電等操作時,Android都會實(shí)時保護(hù),當(dāng)遇到惡意應(yīng)用或有害鏈接時,系統(tǒng)會自動提醒用戶,并提供有關(guān)后續(xù)應(yīng)對措施的建議,在Android設(shè)備上,用戶對于自己的數(shù)據(jù)擁有絕對處理的權(quán)力,用戶可自主決定是否、何時分享自己的數(shù)據(jù),從而保障了用戶的系統(tǒng)安全和數(shù)據(jù)安全。3、Android開放性允許任何移動終端廠商加入到Android聯(lián)盟中來,使其擁有更多的開發(fā)者,有利于積累消費(fèi)者和廠商。

Android平臺劣勢包括以下幾點(diǎn):1、Android平臺由于開發(fā)便利,血腥、暴力、情色方面的程序和游戲難以控制。2、Android存在安全漏洞,“黑客”能實(shí)施遠(yuǎn)程竊取文件、查收電郵乃至盜取用戶名和密碼等違反活動。3、2023年11月,據(jù)證券時報消息,目前鴻蒙HarmonyOSNEXT開發(fā)者預(yù)覽版已不兼容安卓,華為可能推出不兼容安卓的鴻蒙版本。1.4

Android開發(fā)環(huán)境搭建1.4.1AndroidStudio安裝1.4.2AndroidStudio新建項目1.4.3AndroidStudio主界面、應(yīng)用程序目錄結(jié)構(gòu)及相關(guān)文件介紹1.4.4模擬器的創(chuàng)建和管理1.4.1AndroidStudio安裝

AndroidStudio是谷歌在2013年推出的一個Android集成開發(fā)工具,基于IntelliJIDEA,提供了集成的Android開發(fā)工具用于開發(fā)和調(diào)試,并在2015年發(fā)布了正式版1.3,使開發(fā)代碼變得更加容易。AndroidStudio可從官網(wǎng)下載:/studio?hl=zh-cn

1.4.2AndroidStudio新建項目

AndroidStudio安裝完成后,打開AndroidStudio依次點(diǎn)擊文件>新建>新建項目

1.4.3AndroidStudio主界面、應(yīng)用程序目錄結(jié)構(gòu)及相關(guān)文件介紹

Android模式下應(yīng)用程序目錄結(jié)構(gòu)Android模式下res目錄中包含存儲在其子目錄中的圖片資源、布局資源、字符串資源等,res目錄下的資源目錄作用如下:1、drawable:放置位圖文件(PNG、.9.png、JPG或GIF)或編譯為可繪制資源子類型的XML文件;2、layout:放置定義界面布局的XML文件;3、mipmap:放置應(yīng)用圖標(biāo);4、values:放置字符串、整數(shù)和顏色等簡單值的XML文件;5、xml:放置各種XML配置文件。

項目模式下應(yīng)用程序目錄結(jié)構(gòu)項目模式下各目錄和文件作用如下:1、.gradle:存放構(gòu)建工具的jar包和wrapper等;2、.idea:放置AndroidStudioIDE所需要的文件;3、build:app模塊編譯輸出的目錄;4、libs:app模塊專用庫;5、src:放置app模塊所有代碼和資源文件;6、build.gradle(app模塊中):app模塊的gradle配置文件;7、:app模塊的proguard文件;8、build.gradle(應(yīng)用中):適用于所有模塊的gradle配置文件;9、settings.gradle:定義項目包含哪些模塊,負(fù)責(zé)配置子工程;10、perties:和gradle相關(guān)的全局屬性設(shè)置文件;11、localproperties:本地屬性設(shè)置文件(設(shè)置key和SDK的位置等);12、外部庫:項目依賴的庫,編譯時自動下載

AndroidManifest.xml清單文件1<?xmlversion="1.0"encoding="utf-8"?>2<manifestxmlns:android="/apk/res/android"3xmlns:tools="/tools">4

5<!--allowBackup:提供了為應(yīng)用程序數(shù)據(jù)的備份和恢復(fù)功能-->6<!--dataExtractionRules:控制自動備份-->7<!--fullBackupContent:指向包含備份規(guī)則的XML文件-->8<!--icon:普通圖標(biāo);roundIcon:圓形圖標(biāo)-->9<!--label:程序名標(biāo)簽-->10<!--supportsRtl:支持右到左的布局-->11<!--theme:設(shè)置整個應(yīng)用或者某個活動Activity的界面-->12<!--targetApi:目標(biāo)版本-->13<!--name:設(shè)置Application子類的名稱(注冊自己的Application文件)-->14<application15android:allowBackup="true"16android:dataExtractionRules="@xml/data_extraction_rules"17android:fullBackupContent="@xml/backup_rules"18android:icon="@mipmap/ic_launcher"19android:label="@string/app_name"20android:roundIcon="@mipmap/ic_launcher_round"21android:supportsRtl="true"22android:theme="@style/Theme.Lesson"23tools:targetApi="31">24<activity25android:name=".MainActivity"26android:exported="true">27<!--intent-filter標(biāo)簽作用:把當(dāng)前的MainActivity配置成為應(yīng)用程序入口-->28<intent-filter>29<actionandroid:name="ent.action.MAIN"/>30

31<categoryandroid:name="ent.category.LAUNCHER"/>32</intent-filter>33</activity>34</application>35

36</manifest>

MainActivity.java:定義MainActivity布局的目的、功能,并包含各種方法的實(shí)際代碼1//新建的Activity必須繼承AppCompatActivity或者Activity2publicclassMainActivityextendsAppCompatActivity{3//onCreate方法是在Activity創(chuàng)建時被系統(tǒng)調(diào)用,是一個Activity生命周期的開始4@Override5protectedvoidonCreate(BundlesavedInstanceState){6//重寫了父類中的onCreate方法7super.onCreate(savedInstanceState);8//與布局文件建立聯(lián)系:res目錄->layout目錄->activity_main.xml布局文件9setContentView(R.layout.activity_main);10}11}

activity_main.xml:布局文件,定義頁面樣式1<?xmlversion="1.0"encoding="utf-8"?>2<androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="/apk/res/android"3xmlns:app="/apk/res-auto"4xmlns:tools="/tools"5android:layout_width="match_parent"6android:layout_height="match_parent"7tools:context=".MainActivity">8

9<!--Android講究邏輯與視圖分離,所以在Activity是不寫界面的,界面是放在局部文件里面的。-->10<!--ConstraintLayout:約束布局-->11<!--layout_width:設(shè)定寬度-->12<!--layout_height:設(shè)置高度-->13<!--text:設(shè)置文本內(nèi)容-->14<TextView15android:layout_width="wrap_content"16android:layout_height="wrap_content"17android:text="HelloWorld!"18app:layout_constraintBottom_toBottomOf="parent"19app:layout_constraintEnd_toEndOf="parent"20app:layout_constraintStart_toStartOf="parent"21app:layout_constraintTop_toTopOf="parent"/>22

23</androidx.constraintlayout.widget.ConstraintLayout>1.4.4模擬器的創(chuàng)建和管理

Android模擬器包含在AndroidStudio中,是AndroidStudio中用于模擬Android設(shè)備的一個虛擬環(huán)境,這樣就可以在各種設(shè)備上以及各個AndroidAPI級別測試應(yīng)用程序,而無需擁有實(shí)體設(shè)備,具有靈活度高、高還原度和測試結(jié)果迅速等優(yōu)勢。

Andriod應(yīng)用開發(fā)基礎(chǔ)教程第2章常用布局

布局定義了應(yīng)用中的界面結(jié)構(gòu),布局中的所有元素都是建立在View(視圖)和ViewGroup(視圖容器)的基礎(chǔ)上的。View通常繪制用戶可以看到的控件,例如Button(按鈕)和TextView(文本框),是Android所有控件的的基類,View本身可以是單個控件也可以是由多個控件組成的一組控件,通過這種關(guān)系就形成了View樹的結(jié)構(gòu)。View還包含事件處理使用戶和界面可以進(jìn)行交互。ViewGroup是一個不可見的容器,例如LinearLayout(線性布局)和ConstraintLayout(約束),它定義了View和其他ViewGroup對象的布局結(jié)構(gòu),ViewGroup是View的子類因此它也是View,但是ViewGroup可以容納View和ViewGroup,但View不可以再容納其他View或ViewGroup。圖2-1

Android界面視圖層次結(jié)構(gòu)

布局可以通過以下兩種方式聲明:1、在XML中聲明UI元素:Android開發(fā)中最常用的布局方式,可以通過XML文件定義UI控件的位置、大小、顏色等屬性。2、JAVA代碼中實(shí)例化布局元素:Android還允許通過代碼來動態(tài)創(chuàng)建布局,這通常在需要動態(tài)調(diào)整布局或在復(fù)雜布局時使用。代碼布局相比XML布局更加靈活,但是過度使用代碼布局會使得代碼變得難以維護(hù)且不符合MVC的設(shè)計原則,通常建議在簡單布局中使用代碼布局,在需要重用布局或者需要動態(tài)調(diào)整布局時使用XML布局。2.1線性布局

線性布局(LinearLayout)是Android開發(fā)中最基礎(chǔ)且常用的布局方式之一,適合比較簡單的布局場景,它允許開發(fā)者將子視圖按照垂直或水平方向進(jìn)行有序排列。在XML中運(yùn)用線性布局只需在根元素層級內(nèi)添加一個<LinearLayout>標(biāo)簽并設(shè)置相應(yīng)的屬性和布局參數(shù)即可。

表2-1線性布局中常用的屬性屬性屬性值作用android:orientationvertical:垂直horizontal:水平設(shè)置布局的方向android:layout_widthandroid:layout_heightwrap_content:根據(jù)內(nèi)容自適應(yīng)大小match_parent:匹配父容器的大小具體像素值:如10dp定義LinearLayout本身的寬度和高度android:layout_gravitycenter_horizontal:水平居中center_vertical:垂直居中center:居中l(wèi)eft、right:左部、右部top、bottom:上部、下部子視圖在LinearLayout內(nèi)部的對齊方式android:gravity同layout_gravity設(shè)置自身內(nèi)部元素的對齊方式android:layout_weight整數(shù)控制子視圖在垂直或水平方向上占據(jù)的空間比例android:layout_marginandroid:padding具體像素值:如5dp分別設(shè)置LinearLayout的外邊距和內(nèi)邊距案例2.1

使用線性布局制作如圖2-2所示的用戶登錄界面(參考代碼見LinearLayoutActivity)圖2-2用戶登錄應(yīng)用界面2.2相對布局相對布局(RelativeLayout),顧名思義,就是需要有一個參照物,根據(jù)參照物來確定視圖的位置,該參照物可以是其它視圖,也可以是父容器。通過前面的線性布局案例可以發(fā)現(xiàn),如果需要在多個方向上進(jìn)行布局,就要嵌套多個線性布局。界面越復(fù)雜工作量越大,為了減少工作量可以在需要嵌套多個線性布局才能實(shí)現(xiàn)的布局中使用相對布局。相對布局十分靈活,可以實(shí)現(xiàn)復(fù)雜界面的設(shè)計,但掌握起來比較難。表2-2相對布局中常用的屬性屬性屬性值作用與父容器定位相關(guān)屬性android:layout_alignParentToptrue、false值為true時此視圖的頂部與父視圖的頂部邊緣對齊android:layout_alignParentBottomtrue、false值為true時此視圖的底部與父視圖的底部邊緣對齊android:layout_alignParentLefttrue、false值為true時此視圖的左部與父視圖的左部邊緣對齊android:layout_alignParentRighttrue、false值為true時此視圖的右部與父視圖的右部邊緣對齊android:layout_alignParentStarttrue、false值為true時此視圖的起始邊與父視圖的右部起始邊對齊android:layout_alignParentEndtrue、false值為true時此視圖的結(jié)束邊與父視圖的右部結(jié)束邊對齊android:layout_centerInParenttrue、false值為true時此視圖位于父視圖的居中位置android:layout_centerHorizontaltrue、false值為true時此視圖位于父視圖的水平方向上的居中位置android:layout_centerVerticaltrue、false值為true時此視圖位于父視圖的垂直方向上的居中位置相對其它視圖定位屬性android:layout_above其他視圖id將此視圖的底部邊緣定位在給定視圖的上方android:layout_below其他視圖id將此視圖的頂部邊緣定位在給定視圖的下方android:layout_toLeftOf其他視圖id將此視圖的右部邊緣定位在給定視圖的左方android:layout_toRightOf其他視圖id將此視圖的左部邊緣定位在給定視圖的右方android:layout_alignTop其他視圖id將此視圖的頂部邊緣和給定視圖的頂部邊緣對齊android:layout_alignBottom其他視圖id將此視圖的底部邊緣與給定視圖的底部邊緣對齊android:layout_alignLeft其他視圖id將此視圖的左部邊緣與給定視圖的左部邊緣對齊android:layout_alignRight其他視圖id將此視圖的右部邊緣與給定視圖的右部邊緣對齊android:layout_alignStart其他視圖id將此視圖的起始邊與給定視圖的起始邊對齊android:layout_alignEnd其他視圖id將此視圖的結(jié)束邊與給定視圖的結(jié)束邊對齊android:layout_alignBaseline其他視圖id將此視圖的基線與給定視圖的基線對齊案例2.2

相對布局中視圖相對于父容器的位置演示(參考代碼見:RelativeLayoutActivity)android:layout_centerInParent="true"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:layout_alignParentTop="true"android:layout_alignParentBottom="true"android:layout_alignParentRight="true"android:layout_alignParentLeft="true"案例2.3

相對布局中視圖相對于其它視圖的位置演示(參考代碼見:RelativeLayoutActivity)android:layout_above="@+id/reference_1"android:layout_below="@+id/reference_2"android:layout_toLeftOf="@+id/reference_3"android:layout_toRightOf="@+id/reference_4"android:layout_alignTop="@+id/reference_5"android:layout_alignBottom="@+id/reference_6"android:layout_alignLeft="@+id/reference_7"android:layout_alignRight="@+id/reference_8"案例2.4

用相對布局完成案例2-1的用戶登錄界面(參考代碼見:RelativeLayoutActivity)RelativeLayoutActivity加載布局文件activity_relative_layout_land.xml,運(yùn)行RelativeLayoutActivity后生成應(yīng)用界面如圖2-2所示,用戶名密碼登陸部分代碼部分得到了精簡,可見相對布局在復(fù)雜界面設(shè)計中可一定程度上減少布局嵌套,優(yōu)化代碼。2.3絕對布局

AbsoluteLayout(絕對布局)中的控件是通過指定其在父容器中的精確坐標(biāo)來確定的,否則將會被排在左上角,而手機(jī)應(yīng)用需要適應(yīng)不同的屏幕大小,而這種布局模型不能自適應(yīng)屏幕尺寸大小,所以應(yīng)用的相對較少。表2-3絕對布局中常用的屬性屬性屬性值作用android:layout_x具體像素值:如20dp設(shè)置視圖X坐標(biāo)android:layout_y具體像素值設(shè)置視圖Y坐標(biāo)案例2.5

絕對布局演示(參考代碼見:AbsoluteLayoutActivity)2.4表格布局

Android中也允許使用表格行與列的方式來排列控件即表格布局(TableLayout)。表格布局不需要聲明包含了多少行、多少列,而是通過添加<TableRow>標(biāo)簽和其他控件的方式來確定表格的行數(shù)和列數(shù),使用表格布局有以下注意事項;1、如果直接在TableLayout中添加控件,那么控件將和父容器等寬;2、如果想讓控件出現(xiàn)在同一行,那么這些控件的外層一定要加一對<TableRow>;3、在TableRow中的控件,寬度都是默認(rèn)wrap_content。表2-4

表格布局中常用的屬性屬性屬性值作用android:stretchColumns列的索引值,從0開始,多個列索引值必須用逗號隔開,也可用通過“*”代替所有列拉伸列以填滿剩下的多余空白空間。android:shrinkColumns收縮列。當(dāng)可收縮的列過寬(內(nèi)容過多)不會被擠出屏幕,注意:一列能同時收縮和拉伸android:collapseColumns隱藏列,從頁面消失不占空間android:layout_span列數(shù)量列數(shù)跨度,指定當(dāng)前View所占的列數(shù)。如android:layout_span="2"該控件占據(jù)2列android:layout_column列的索引值設(shè)置當(dāng)前View所在的列,如android:layout_column="1"該控件顯示在第2列案例2.6

使用表格布局設(shè)計一個簡單的計算器界面。(參考代碼見:TableLayoutActivity)2.5網(wǎng)格布局

網(wǎng)格布局(GridLayout)相對于表格布局和線性布局嵌套更加靈活,網(wǎng)格布局中可以自定義網(wǎng)格行數(shù)和列數(shù)、控件位于網(wǎng)格的行列位置、控件跨越的行列數(shù)及控件排列方式等網(wǎng)格布局和線性布局一樣,也分為水平和垂直兩種方式,默認(rèn)水平布局下一個控件挨著一個控件從左到右依次排列,達(dá)到設(shè)置列數(shù)后控件會自動換行進(jìn)行排列。表2-5網(wǎng)格布局中常用的屬性屬性屬性值作用android:columnCount整數(shù)定義網(wǎng)格列數(shù)android:rowCount定義網(wǎng)格行數(shù)android:layout_columnSpan設(shè)置當(dāng)前Viw所占的列數(shù)android:layout_rowSpan設(shè)置當(dāng)前Viw所占的行數(shù)android:layout_column設(shè)置當(dāng)前view所在的列注:某控件跨越多行或多列,需要將該控件的lavout_rowSpan或lavout_columnSpan屬性設(shè)置為跨越的行列數(shù),再設(shè)置layout_gravity=“fill”,表明該控件填滿所跨越的行或列。案例2.7

使用網(wǎng)格布局改進(jìn)計算器界面顯示(參考代碼見:GridLayoutActivity)2.6幀布局

幀布局(FrameLayout)是一種可疊加的布局,后添加的控件會層疊在先添加的控件上,后添加控件會覆蓋先添加的控件。表2-6幀布局的常用屬性屬性屬性值作用android:layout_marginTop像素值設(shè)置上外邊距android:layout_marginBottom設(shè)置下外邊距android:layout_marginLeft?設(shè)置左外邊距android:layout_marginRight?設(shè)置右外邊距android:paddingLeft?設(shè)置左內(nèi)邊距android:paddingRight設(shè)置右內(nèi)邊距android:paddingTop設(shè)置上內(nèi)邊距android:paddingBottom?設(shè)置下內(nèi)邊距android:gravitycenter、left、right等位置值控制子View在父容器內(nèi)部的位置案例2.8

幀布局演示(參考代碼見:FrameLayoutActivity)2.7約束布局

約束布局(ConstraintLayout)主要是為了解決布局嵌套過多的問題,它通過定義界面元素之間的相對位置和尺寸關(guān)系,自動調(diào)整布局以適應(yīng)不同的屏幕尺寸和方向。要在約束布局中定義某個視圖的位置,必須為該視圖添加至少一個水平約束條件和一個垂直約束條件,每個約束條件均表示與其他視圖、父布局或隱形引導(dǎo)線之間連接或?qū)R方式。2.7.1添加刪除約束

成功創(chuàng)建ConstraintLayoutActivity后,在本模塊res資源目錄下打開布局文件activity_constraint_layout.xml,點(diǎn)擊界面“Design”進(jìn)入Design(設(shè)計)界面添加約束條件前先從“Palette”中拖入控件到Design界面中選中“Button”后可見該控件四周出現(xiàn)藍(lán)色矩形框,該方框四個角有4個實(shí)心方框,四條邊中心位置有4個空心圓圈,鼠標(biāo)左鍵拖動這四個4個實(shí)心方框可對Button控件進(jìn)行拉伸收縮操作,鼠標(biāo)左鍵按住空心圓圈,將其拖動到邊界或其它控件對應(yīng)位置,即可為該控件添加對應(yīng)的水平或垂直約束刪除約束時,可以一次性刪除所有約束,也可刪除指定的約束1、刪除所有約束:點(diǎn)擊Design界面中的“ClearAllConstraints”。2、刪除指定的約束:選中約束對應(yīng)的圓點(diǎn)后按下“Delete”鍵。2.7.2約束布局中的約束方式

1、相對定位約束相對定位約束即用目標(biāo)控件對被約束控件進(jìn)行約束定位,需要注意的是垂直方向的約束,其目標(biāo)控件件的約束也必須是垂直方向的,同理水平方向的約束,其目標(biāo)控件的約束也必須是水平方向的。表2-7常用的相對定位約束屬性及說明要設(shè)置被約束控件在父控件或目標(biāo)控件居中對齊方法如下:(1)垂直居中l(wèi)ayout_constraintBottom_toBottomOf="parent"layout_constraintTop_toTopOf="parent"(2)水平居中l(wèi)ayout_constraintLeft_toLeftOf="parent"layout_constraintRight_toRightOf="parent"(3)垂直水平居中l(wèi)ayout_constraintBottom_toBottomOf="parent"layout_constraintTop_toTopOf="parent"layout_constraintLeft_toLeftOf="parent"layout_constraintRight_toRightOf="parent"2、角度定位約束約束布局中的角度定位,通過設(shè)置角度和距離來確定兩個控件的相對位置,其中距離是指被約束控件和目標(biāo)控件中心點(diǎn)距離,角度是以Y軸正半軸為旋轉(zhuǎn)起始線順時針旋轉(zhuǎn)來計算的。表2-8常用的角度定位約束屬性及說明當(dāng)角度設(shè)置為0時,被約束控件在目標(biāo)控件正上方;當(dāng)角度設(shè)置為90時,被約束控件在目標(biāo)控件正右方;當(dāng)角度設(shè)置為180時,被約束控件在目標(biāo)控件正下方;當(dāng)角度設(shè)置為270時,被約束控件在目標(biāo)控件正左方。屬性屬性值作用android:layout_constraintCircle目標(biāo)控件id用目標(biāo)控件中心點(diǎn)確定定位原點(diǎn)android:layout_constraintCircleAngle角度旋轉(zhuǎn)角度android:layout_constraintCircleRadius像素值被約束控件和目標(biāo)控件中心點(diǎn)距離3、引導(dǎo)線約束可以添加垂直或水平引導(dǎo)線來約束控件,該引導(dǎo)線用戶不可見。引導(dǎo)線定位需要先設(shè)置引導(dǎo)線方向再確定引導(dǎo)線的起始位置,起始位置可用像素值或百分比設(shè)置。表2-9常用的引導(dǎo)線約束屬性及說明屬性屬性值作用android:orientationvertical:垂直horizontal:水平設(shè)置引導(dǎo)線的顯示方向android:layout_constraintGuide_begin像素值設(shè)置引導(dǎo)線的起始距離android:layout_constraintGuide_end像素值設(shè)置引導(dǎo)線的結(jié)束距離android:layout_constraintGuide_percent0-1之間小數(shù)以比例方式設(shè)置引導(dǎo)線的起始距離4、尺寸約束約束布局中還支持控件尺寸約束,如約束控件最大最小高寬度、控件高寬比、控件尺寸和父布局尺寸的百分比等。表2-10尺寸束屬性及說明屬性屬性值作用控件高度或?qū)挾葹閣rap_content時,可以約束其最大最小的高寬度android:minWidth像素值設(shè)置被約束控件最小的寬度android:minHeight像素值設(shè)置被約束控件最小的高度android:maxWidth像素值設(shè)置被約束控件最大的寬度android:maxHeight像素值設(shè)置被約束控件最大的高度修改控件高寬為0dp,控件尺寸可按照父布局尺寸的百分比來設(shè)置android:layout_constraintWidth_percent0-1之間小數(shù)寬度占父布局百分比比例android:layout_constraintHeight_percent0-1之間小數(shù)高度占父布局百分比比例當(dāng)寬高有一個被設(shè)置為0dp時,可設(shè)置寬高比android:layout_constraintDimensionRatio比例值被約束控件寬高比設(shè)置2.7.3邊距和偏移

邊距即設(shè)置被約束控件外邊距對其定位,偏移是為了讓當(dāng)前的控件不再居中而是具有偏向性,可以通過定義偏移屬性來實(shí)現(xiàn),偏移屬性設(shè)置了左側(cè)和上方的百分比數(shù)值,數(shù)值越小當(dāng)前控件會更加靠近左側(cè)或者上方,如果不設(shè)置偏移屬性值默認(rèn)為0.5即被約束控件居中。表2-11邊距和偏移屬性及說明屬性屬性值作用android:layout_marginLeft像素值設(shè)置控件在其左邊的外邊距android:layout_marginRight像素值設(shè)置控件在其右邊的外邊距android:layout_marginTop像素值設(shè)置控件在其頂部的外邊距android:layout_marginBottom像素值設(shè)置控件在其底部的外邊距android:layout_constraintHorizontal_bias0-1間小數(shù)水平偏移,0:最左邊,1:最右邊android:layout_constraintVertical_bias0-1間小數(shù)垂直偏移,0:最上面,1:最下面案例2.9

用Button演示相對定位約束,Button之間的約束如右圖所示。(參考代碼見:ConstraintLayoutActivity)案例2.10

角度定位約束演示。(參考代碼見:ConstraintLayoutActivity)角度為120度,約束控件和目標(biāo)控件中心距離為300dp。案例2.11

引導(dǎo)線約束演示。(參考代碼見:ConstraintLayoutActivity)1、在Design界面中加上一根垂直引導(dǎo)線,引導(dǎo)線距離父容器左邊邊緣的距離占父容器寬度的百分比為50%,再加上三根水平引導(dǎo)線,這三根引導(dǎo)線距離頂部邊緣的距離占父容器高度的百分比分別為25%、50%和75%

2、水平垂直引導(dǎo)線添加好后,再在約束布局中添加控件使其受引導(dǎo)線約束,控件受約束條件如下圖所示。

3、引導(dǎo)線約束添加好后,運(yùn)行ConstraintLayoutActivity。案例2.12

尺寸約束演示。(參考代碼見:ConstraintLayoutActivity)Andriod應(yīng)用開發(fā)基礎(chǔ)教程第3章常用控件與消息處理在Android開發(fā)中,控件是構(gòu)建用戶界面的基本元素,它們提供了與用戶的交互方式。Android提供了多種控件,控件的添加有兩種方法,第一種是在在布局文件的Design界面中有一個Palette面板,該面板中包含了Android中的大部分控件,拖動所需控件到應(yīng)用界面即可,第二種是在布局文件編輯代碼添加控件。表3-1常用控件列表控件分類控件列表文本類TextView、EditText按鈕類Button、ImageButton、RadioButton、CheckBox、ToggleButton時間類DatePicker、TimePicker、CalendarView、AnalogClock布局類ConstraintLayout、LinearLayout、TableLayout、RelativeLayout、GridLayout、FrameLayout圖片類ImageView、ImageButton進(jìn)度類SeekBar、ProgressBar滾動條類HorizontalScrollView、ScrollView多媒體類VideoView、MediaController、SurfaceView菜單類OptionMenu、ContextMenu、PopupMenu對話框類AlertDialog、自定義Dialog表3-2控件通用屬性屬性屬性值作用android:id@id/Name:使用已存在id@+id/Name:添加新的id設(shè)置控件idandroid:layout_widthandroid:layout_heightwrap_content:根據(jù)內(nèi)容自適應(yīng)大小match_parent:匹配父容器的大小具體像素值:如10dp定義控件的寬度和高度android:layout_gravitycenter_horizontal:水平居中center_vertical:垂直居中center:居中l(wèi)eft、right:左部、右部top、bottom:上部、下部子控件在父容器內(nèi)部對齊方式android:gravity同layout_gravity設(shè)置自身內(nèi)部元素的對齊方式android:layout_marginandroid:padding具體像素值:如5dp設(shè)置控件的外邊距和內(nèi)邊距android:backgroundrgb數(shù)值設(shè)置背景顏色android:visibilitytrue、false設(shè)置控件的可見性android:clickabletrue、false設(shè)置控件是否響應(yīng)點(diǎn)擊事件android:alpha0到1之間數(shù)值控件透明度設(shè)置3.1事件處理

在Android開發(fā)中,事件處理機(jī)制是用戶交互界面的核心部分,Android通過事件處理機(jī)制,確保用戶的點(diǎn)擊、觸摸、設(shè)備的屏幕旋轉(zhuǎn)、按鍵操作等事件能夠得到及時的響應(yīng)和處理。對事件處理方式主要有兩種:基于監(jiān)聽器的事件處理和基于回調(diào)的事件處理,事件處理的流程大致如下:1、用戶與設(shè)備交互,如點(diǎn)擊按鈕、觸摸屏幕等產(chǎn)生事件;2、事件源捕獲到事件,并將事件傳遞給事件分發(fā)器(EventDispatcher);3、事件分發(fā)器根據(jù)事件的類型和事件源的類型,找到對應(yīng)的事件監(jiān)聽器或回調(diào)函數(shù);4、事件分發(fā)器調(diào)用事件監(jiān)聽器或回調(diào)函數(shù)中的相應(yīng)方法,對事件進(jìn)行處理;5、處理完成后,事件監(jiān)聽器或回調(diào)函數(shù)將處理結(jié)果返回給事件分發(fā)器;6、事件分發(fā)器將處理結(jié)果傳遞回事件源,并更新界面或執(zhí)行其他操作。3.1.1基于監(jiān)聽的事件處理

基于監(jiān)聽器的事件處理是Android中最常用的事件處理方式,這種方式是通過在事件源上注冊事件監(jiān)聽器來監(jiān)聽事件,當(dāng)事件發(fā)生時,事件源會調(diào)用監(jiān)聽器中的相應(yīng)方法,從而實(shí)現(xiàn)對事件的處理。事件監(jiān)聽處理主要涉及到3個對象:1、事件源(EventSource):產(chǎn)生事件的控件,如按鈕、文本框等;2、事件(Event):由事件源產(chǎn)生的動作或狀態(tài)變化,如點(diǎn)擊事件、觸摸事件、設(shè)備的屏幕旋轉(zhuǎn)、按鍵操作等;3、事件監(jiān)聽器(EventListener):用于監(jiān)聽事件源產(chǎn)生的事件,并對事件進(jìn)行處理的接口或類?;诒O(jiān)聽接口的事件處理中需首先將事件監(jiān)聽器注冊到事件源,當(dāng)用戶與設(shè)備交互時便會觸發(fā)事件源上的事件生成事件對象,事件觸發(fā)事件監(jiān)聽器,事件監(jiān)聽器再調(diào)用事件處理器處理相應(yīng)事件事件監(jiān)聽器能處理的事件類型有單擊事件、長按事件、焦點(diǎn)改變事件等,處理這些事件時事件監(jiān)聽器必須實(shí)現(xiàn)View類中的內(nèi)部接口事件監(jiān)聽器處理事件類型實(shí)現(xiàn)接口接口需實(shí)現(xiàn)的方法單擊事件View.OnClickListenerpublicvoidonClick(Viewv)長按事件View.OnLongClickListenerpublicbooleanonLongClick(Viewview)焦點(diǎn)改變事件View.onFocusChangeListenerpublicbooleanonFocusChange(Viewv,booleanhasFocus)按鍵事件View.OnKeyListenerpublicbooleanonKey(Viewv,intkeyCode,KeyEventkeyEvent)觸摸事件View.OnTouchListenerpublicbooleanonTouch(Viewv,MotionEventmotionEvent)基于監(jiān)聽的事件處理方式中每個控件均可以針對特定的事件指定一個事件監(jiān)聽器,每個事件監(jiān)聽器也可以監(jiān)聽一個或多個事件源,因?yàn)橥粋€事件源上可能發(fā)生多種事件,不同事件可以交給不同的事件監(jiān)聽器來處理,同時也可以讓一類事件都使用同一個事件監(jiān)聽器來處理。3.1.2基于回調(diào)的事件處理

所謂的回調(diào)函數(shù)是指在A類中定義了一個方法,這個方法中用到了一個接口和該接口中的抽象方法,但是抽象方法沒有具體的實(shí)現(xiàn),需要B類去實(shí)現(xiàn),B類實(shí)現(xiàn)該方法后,它本身不會去調(diào)用該方法,而是傳遞給A類,供A類去調(diào)用,這種機(jī)制就稱為回調(diào)?;诨卣{(diào)的事件處理是另一種常見的事件處理方式,它通過在事件源上設(shè)置回調(diào)函數(shù)來監(jiān)聽事件,這種事件處理方式事件源與事件監(jiān)聽器是統(tǒng)一的,或者說沒有事件監(jiān)聽器。當(dāng)事件發(fā)生時,事件源會調(diào)用回調(diào)函數(shù)來處理事件。這種方式不如基于監(jiān)聽器的事件處理靈活和可擴(kuò)展。表3-6Android系統(tǒng)提供的常用回調(diào)方法方法說明booleanonKeyDown(intkeyCode,KeyEventevent)用戶在該控件上按下某個鍵時觸發(fā)的方法booleanonKeyLongPress(intkeyCode,KeyEventevent)用戶在該控件上長按某個鍵時觸發(fā)的方法booleanonKeyShortcut(intkeyCode,KeyEventevent)當(dāng)一個鍵盤快捷鍵事件發(fā)生時觸發(fā)該方法booleanonKeyUp(intkeyCode,KeyEventevent)用戶在該控件上松開某個鍵時觸發(fā)的方法booleanonTouchEvent(MotionEventevent)用戶在該控件上觸發(fā)觸摸事件觸發(fā)的方法booleanonTrackballEvent(MotionEventevent)用戶在該控件上觸發(fā)觸摸軌跡觸發(fā)的方法booleanonFocusChanged(MotionEventevent)用戶在該控件上焦點(diǎn)發(fā)生改變觸發(fā)的方法3.2文本類控件3.2.1TextView

TextView意為文本框,向用戶顯示文本,并允許用戶編輯文本,TextView是一個完整的文本編輯器,但基類被配置為不允許編輯。TextView類繼承自View類,是View類的一個子類。TextView常用的一種控件,屬性也是比較繁多的,可設(shè)置文字的字體大小、顏色、背景色、邊距等基本樣式。表3-7TextView常用屬性表3-7TextView常用屬性案例3.1

顯示不同樣式的TextView。(參考代碼見:TextViewActivity)界面中顯示了不同樣式的TextView:帶圖片的、有陰影的、有超長文字的、單擊可用默認(rèn)瀏覽器打開網(wǎng)址的、沒有文字顯示提示信息的。案例3.2

為TextView添加單擊事件監(jiān)聽器,點(diǎn)擊TextView在應(yīng)用屏幕上向用戶顯示一條TextView中的文本內(nèi)容信息,一段時間后信息自動消失。(參考代碼見:TextViewActivity)3.2.2EditText

EditText意為編輯框,EditText類繼承自TextView,但允許用戶改變其中的內(nèi)容,屬性和用法與TextView一致。表3-8EditText常用屬性屬性屬性描述android:inputType設(shè)置文本輸入類型:"none":未指定明確類型"text":輸入普通字符"textCapCharacters":所有字母大寫"textCapWords":單詞首字母大寫"textCapSentences":每句的第一個字母大寫"textAutoCorrect":自動對文本進(jìn)行糾正"textAutoComplete":自動完成文本"textMultiLine":多行輸入"textImeMultiLine":輸入法多行(不一定支持)"textNoSuggestions":不提示"textUri":URI格式"textEmailAddress":電子郵件地址格式"textEmailSubject":郵件主題格式"textShortMessage":短消息格式"textLongMessage":長消息格式"textPersonName":人名格式"textPostalAddress":郵政格式"textPassword":密碼格式"textVisiblePassword":密碼可見格式"textWebEditText":作為網(wǎng)頁表單的文本格式"textFilter":文本篩選格式"textPhonetic":拼音輸入格式"number":數(shù)字格式(不能輸入小數(shù)點(diǎn))"numberSigned":有符號數(shù)字格式"numberDecimal":可以帶小數(shù)點(diǎn)的浮點(diǎn)格式(可輸入小數(shù)點(diǎn))"phone":撥號鍵盤"datetime":日期+時間格式"date":日期鍵盤"time":時間鍵盤android:selectAllOnFocus點(diǎn)擊編輯框獲得焦點(diǎn)后:true:選中編輯框中所有的文本內(nèi)容false:將光標(biāo)移動到文本的開始或者結(jié)尾android:singleLinetrue:限制EditText只允許單行輸入,而且不會滾動false:多行輸入顯示android:cursorVisibletrue:顯示光標(biāo)false:不顯示光標(biāo)android:maxLength設(shè)置最大輸入字符個數(shù),再多了就輸入不進(jìn)去了android:focusable是否可獲取焦點(diǎn)(為false時,軟鍵盤永不彈出)android:imeOptions軟鍵盤回車鍵/確認(rèn)鍵顯示功能:actionGo:去往,通常用于打開鏈接actionNext:下一步,通常用于跳轉(zhuǎn)到下一個EditTextactionSend:發(fā)送,通常用于發(fā)送信息actionSearch:搜索,通常用于搜索信息actionDone:完成,通常表示事情做完了actionNone:未指定,編輯框右側(cè)不帶任何提示android:digits限制編輯框中只能輸入自己定義的字符串,如果輸入其它將不予以顯示編輯框輸入信息軟小鍵盤的控制可通過在模塊下的AndroidMinifest.xml<activity>標(biāo)簽設(shè)置屬性windowSoftInputMode即可android:windowSoftInputMode可選屬性值對軟鍵盤作用如下:(1)stateUnspecified:軟鍵盤的默認(rèn)狀態(tài),EditText獲取焦點(diǎn)的時候才會彈出;(2)stateUnchanged:軟鍵盤將一直保持在上一個activity里的狀態(tài),無論是可見還是隱藏;(3)stateHidden:用戶選擇activity時,軟鍵盤總是被隱藏;(4)stateAlwaysHidden:當(dāng)Activity的主窗口有輸入焦點(diǎn)時始終隱藏軟鍵盤;(5)stateVisible:當(dāng)Activity的主窗口有輸入焦點(diǎn)時始終顯示軟鍵盤;(6)stateAlwaysVisible:Activity的主窗口有輸入焦點(diǎn)時始終顯示軟鍵盤;(7)adjustUnspecified:默認(rèn)設(shè)置,通常由系統(tǒng)自行決定是隱藏還是顯示,并且會調(diào)整布局進(jìn)而使輸入內(nèi)容始終可見;(8)adjustResize:始終調(diào)整Activity主窗口的尺寸來為屏幕上的軟鍵盤騰出空間,通常意味著窗口的內(nèi)容會向上移動,以便為鍵盤騰出空間,實(shí)際上就是給根布局加Padding,padding的值就是軟鍵盤的高度;(9)adjustPan:不調(diào)整Activity主窗口的尺寸來為軟鍵盤騰出空間,而是自動平移窗口的內(nèi)容,使當(dāng)前焦點(diǎn)永遠(yuǎn)不被鍵盤遮蓋,讓用戶始終都能看到其輸入的內(nèi)容。實(shí)際上就是布局整體向上滾動,上滾動的布局是根據(jù)當(dāng)前焦點(diǎn)所在的位置確定的。(10)adjustNothing:Activity窗口不會做任何調(diào)整,窗口的內(nèi)容也不會改變。案例3.3

使用TextView和EditText設(shè)計一個用戶注冊界面,用戶名(用戶名只能為中文或英文)和密碼不為空時顯示注冊成功,否則顯示提示信息。(參考代碼見:EditTextActivity)android:inputType="textPersonName"android:inputType="date"android:inputType="textEmailAddress"android:inputType="phone"android:inputType="textPassword"用戶名判斷可用正則表達(dá)式://用正則表達(dá)式匹配輸入的用戶名,只能為英文或中文Stringregex="[[\\u4e00-\\u9fa5]|[a-zA-Z]]+";//匹配用戶名的正則表達(dá)式Patternpattern=Ppile(regex);//編譯正則表達(dá)式Matchermatcher=pattern.matcher(name);//創(chuàng)建匹配器3.3圖片控件圖片控件可以用ImageView實(shí)現(xiàn),lmageView繼承自View,是Android開發(fā)中最常用的控件之一,主要用于顯示圖片,也可以用于顯示Drawable對象,ImageView既可以加載本地圖片也可以加載資源目錄下drawable、mipmap中的圖片。表3-9ImageView常用屬性屬性屬性描述android:src設(shè)置ImageView圖片內(nèi)容,區(qū)別android:background:android:background-設(shè)置背景樣式,會根據(jù)ImageView給定的寬度來拉伸圖片進(jìn)行填充android:src-設(shè)置ImageView圖片內(nèi)容,是ImageView特有的一個屬性,用來設(shè)置ImageView要展示的圖片,不會對圖片進(jìn)行拉伸android:maxHeight設(shè)置ImageView的最大高度android:maxWidth設(shè)置ImageView的最大寬度android:adjustViewBounds設(shè)置在ImageView調(diào)整邊界時是否保持圖片的縱橫比例,需要與android:maxWidth、android:MaxHeight一起使用,單獨(dú)使用沒有效果android:cropToPadding設(shè)置是否剪切圖片以適應(yīng)內(nèi)邊距的大小android:tint設(shè)置圖片渲染顏色,單獨(dú)設(shè)置時,會覆蓋掉原有背景圖片,需要與android:tintMode一起使用android:tintMode圖像混合技術(shù)中用Sa、Da分別代表源圖像和目標(biāo)圖像透明度,Sc、Dc分別代表源圖像和目標(biāo)圖像的顏色值,在做圖片顏色渲染時目標(biāo)圖像指圖片,源圖像指渲染顏色。android:tintMode屬性設(shè)置圖片渲染的混合模式,[]左側(cè)表示輸出的透明度值,右側(cè)表示輸出的顏色值。src_over:在目標(biāo)圖像的上方繪制源圖像,[Sa+(1-Sa)*Da,Sc+(1-Sa)*Dc]src_in:只在源圖像和目標(biāo)圖像相交的地方繪制目標(biāo)圖像,[Sa*Da,Sc*Da]src_atop:在目標(biāo)圖像和源圖像相交的地方繪制源圖像而在不相交的地方繪制目標(biāo)圖像,[Da,Sc*Da+(1-Sa)*Dc]multiply:混合,[Sa*Da,Sc*Dc]add:飽和度相加,[max(0,min(Sa+Da,1)),max(0,min(Sc+Dc,1))]screen:[Sa+Da-Sa*Da,Sc+Dc-Sc*Dc]android:scaleType設(shè)置是否改變圖片比例以及超出部分如何裁剪:matrix:按照矩陣方式縮放,不調(diào)整圖片大小,從左上角開始往右下角繪制,如果超出的

ImageView的范圍則直接舍棄。不改比例、會裁剪fitXY:從橫縱兩個方向?qū)D片進(jìn)行縮放,以占滿整個ImageView,改比例、不裁剪fitStart:將圖片等比例縮放,直至能夠完全顯示,然后將圖片至于ImageView的左上角。不改比例、不裁剪。fitCenter:和fitStart類似,只不過會將圖片居中放置。不改比例、不裁剪。fitEnd:和fitStart類似,只不過會將圖片放在ImageView的右下角。不改比例、不裁剪。center:直接將圖片原封不動的放到ImageView中央,多余部分裁剪掉。不改比例、裁剪。centerCrop:等比例縮放圖片,直至圖片能夠完全占滿ImageView,占滿之后多余部分會被裁剪掉。不改比例、裁剪。centerInside:保持原始比例的縮放圖片,直至能夠完整顯示圖片的內(nèi)容。不改比例、不裁剪。案例3.4

圖片顏色渲染不同模式演示,鼠標(biāo)單擊圖片切換渲染模式(參考代碼見:ImageViewTintActivity)案例3.5

演示android:scaleType屬性值對ImageView加入圖片效果影響(參考代碼見:ImageViewscaleTypeActivity)鼠標(biāo)單擊圖片即可改變android:scaleType屬性值,使得圖片在ImageView中有不同的呈現(xiàn)效果3.4按鈕類控件3.4.1Button

Button類繼承自TextView,所以Button能使用TextView的屬性和方法,如設(shè)置按鈕長寬度、背景顏色、顯示的文本內(nèi)容等,區(qū)別在于:1、Button擁有默認(rèn)的按鈕背景,而TextView默認(rèn)無背景;2、Button的內(nèi)部文本默認(rèn)居中對齊,而TextView的內(nèi)部文本默認(rèn)靠左對齊;3、Button會默認(rèn)將英文字母轉(zhuǎn)為大寫,而TextView保持原始的英文大小寫;用戶可通過在資源目錄res下drawable創(chuàng)建xml文件自定義Button的樣式,如圓角、漸變、大小、描邊等等,首先依次選擇res>drawable>新建>DrawableResourceFile,在彈出的NewDrawableResourceFile面板中Rootelement選擇寫入shape,F(xiàn)ilename自定義xml文件創(chuàng)建好后,用戶可以在<shape>標(biāo)簽中可通過android:shape屬性定義Button的形狀,<shape>標(biāo)簽下還可以繼續(xù)添加子xml標(biāo)簽定義Button的其他樣式表3-10標(biāo)簽可選屬性作用標(biāo)簽名屬性作用<shape>android:shape設(shè)置Button形狀:rectangle:矩形oval:橢圓line:線ring:圓環(huán)<corners>android:radiusandroid:topLeftRadiusandroid:topRightRadiusandroid:bottomLeftRadiusandroid:bottomRightRadius設(shè)置圓角半徑,屬性值為整數(shù)<gradient>android:angle="integer"android:centerX="integer"android:centerY="integer"android:centerColor="integer"android:endColor="color"android:gradientRadius="integer"android:startColor="color"android:type=["linear"|"radial"|"sweep"]android:useLevel=["true"|"false"]設(shè)置漸變<padding>android:left="integer"android:top="integer"android:right="integer"android:bottom="integer"設(shè)置各方向間距<size>android:width="integer"android:height="integer"設(shè)置大小<stroke>android:width="integer"android:color="color"android:dashWidth="integer"android:dashGap="integer"設(shè)置描邊<solid>android:color設(shè)置填充顏色注:為了避免主題樣式對顯示效果的影響,可修改模塊下res資源目錄中values目錄下themes.xml文件:<stylename="Base.Theme.MyApplication"parent="Theme.Material3.DayNight.NoActionBar">為<stylename="Base.Theme.MyApplication"parent="Theme.MaterialComponents.DayNight.NoActionBar.Bridge">即可。案例3.6

自定義Button樣式。(參考代碼見:ButtonActivity)Button樣式設(shè)置文件my_button.xml:1<?xmlversion="1.0"encoding="utf-8"?>2<shapexmlns:android="/apk/res/android"3android:shape="rectangle">4<!--矩形-->5<cornersandroid:radius="10dp"/><!--設(shè)置圓角半徑-->6<gradient7android:centerColor="#7cfc00"8android:endColor="#4169e1"9android:startColor="#d3d3d3"10android:type="linear"/><!--設(shè)置漸變-->11<padding12android:top="2dp"13android:bottom="2dp"14android:left="2dp"15android:right="2dp"/><!--設(shè)置各方向間距-->16<size17android:width="100dp"18android:height="50dp"/><!--設(shè)置大小-->19<stroke20android:width="2dp"21android:color="#000000"/><!--設(shè)置描邊-->22<

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論