




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
AndroidStudio開發實戰從零基礎到App上線(第2版)注:原文檔因內容過長無法上傳,從而部分內容改圖片,如需原文檔請下載后留言謝謝支持。目錄TOC\h\h第1章AndroidStudio環境搭建\h1.1AndroidStudio簡介\h1.2AndroidStudio的安裝\h1.2.1開發機配置要求\h1.2.2安裝依賴的軟件\h1.2.3安裝AndroidStudio\h1.2.4下載Android的SDK\h1.3運行小應用HelloWorld\h1.3.1創建新項目\h1.3.2編譯項目/模塊\h1.3.3創建模擬器\h1.3.4在模擬器上運行App\h1.4App的工程結構\h1.4.1工程目錄說明\h1.4.2編譯配置文件build.gradle\h1.4.3App運行配置AndroidManifest.xml\h1.4.4在代碼中操縱控件\h1.5準備開始\h1.5.1使用快捷鍵\h1.5.2安裝SVN工具\h1.5.3安裝常用插件\h1.5.4導入已經存在的工程\h1.5.5新建一個Activity頁面\h1.6小結\h第2章初級控件\h2.1屏幕顯示\h2.1.1像素\h2.1.2顏色\h2.1.3屏幕分辨率\h2.2簡單布局\h2.2.1視圖View的基本屬性\h2.2.2線性布局LinearLayout\h2.2.3滾動視圖ScrollView\h2.3簡單控件\h2.3.1文本視圖TextView\h2.3.2按鈕Button\h2.3.3圖像視圖ImageView\h2.3.4圖像按鈕ImageButton\h2.4圖形基礎\h2.4.1圖形Drawable\h2.4.2狀態列表圖形\h2.4.3形狀圖形\h2.4.4九宮格圖片\h2.5實戰項目:簡單計算器\h2.5.1設計思路\h2.5.2小知識:日志Log/提示Toast\h2.5.3代碼示例\h2.6小結\h第3章中級控件\h3.1其他布局\h3.1.1相對布局RelativeLayout\h3.1.2框架布局FrameLayout\h3.2特殊按鈕\h3.2.1復選框CheckBox\h3.2.2開關按鈕Switch\h3.2.3單選按鈕RadioButton\h3.3適配視圖基礎\h3.3.1下拉框Spinner\h3.3.2數組適配器ArrayAdapter\h3.3.3簡單適配器SimpleAdapter\h3.4編輯框\h3.4.1文本編輯框EditText\h3.4.2自動完成編輯框AutoCompleteTextView\h3.5活動Activity基礎\h3.5.1Activity的生命周期\h3.5.2使用Intent傳遞消息\h3.5.3向下一個Activity傳遞參數\h3.5.4向上一個Activity返回參數\h3.6實戰項目:房貸計算器\h3.6.1設計思路\h3.6.2小知識:文本工具TextUtils\h3.6.3代碼示例\h3.7實戰項目:登錄App\h3.7.1設計思路\h3.7.2小知識:提醒對話框AlertDialog\h3.7.3代碼示例\h3.8小結\h第4章數據存儲\h4.1共享參數SharedPreferences\h4.1.1共享參數的基本用法\h4.1.2實現記住密碼功能\h4.2數據庫SQLite\h4.2.1SQLite的基本用法\h4.2.2數據庫幫助器SQLiteOpenHelper\h4.2.3優化記住密碼功能\h4.3SD卡文件操作\h4.3.1SD卡的基本操作\h4.3.2公有存儲空間與私有存儲空間\h4.3.3文本文件讀寫\h4.3.4圖片文件讀寫\h4.4應用Application基礎\h4.4.1Application的生命周期\h4.4.2利用Application操作全局變量\h4.5內容提供與處理\h4.5.1內容提供器ContentProvider\h4.5.2內容解析器ContentResolver\h4.5.3內容觀察器ContentObserver\h4.6實戰項目:購物車\h4.6.1設計思路\h4.6.2小知識:菜單Menu\h4.6.3代碼示例\h4.7小結\h第5章高級控件\h5.1日期時間控件\h5.1.1日期選擇器DatePicker\h5.1.2時間選擇器TimePicker\h5.2列表類視圖\h5.2.1基本適配器BaseAdapter\h5.2.2列表視圖ListView\h5.2.3網格視圖GridView\h5.3翻頁類視圖\h5.3.1翻頁視圖ViewPager\h5.3.2翻頁標題欄PagerTitleStrip/PagerTabStrip\h5.3.3簡單的啟動引導頁\h5.4碎片Fragment\h5.4.1靜態注冊\h5.4.2動態注冊/碎片適配器FragmentStatePagerAdapter\h5.4.3改進的啟動引導頁\h5.5廣播Broadcast基礎\h5.5.1發送/接收臨時廣播\h5.5.2定時器AlarmManager\h5.6實戰項目:萬年歷\h5.6.1設計思路\h5.6.2小知識:月份選擇器MonthPicker\h5.6.3代碼示例\h5.7實戰項目:日程表\h5.7.1設計思路\h5.7.2小知識:震動器Vibrator\h5.7.3代碼示例\h5.8小結\h第6章自定義控件\h6.1自定義視圖\h6.1.1聲明屬性\h6.1.2構造對象\h6.1.3測量尺寸\h6.1.4寬高尺寸的動態調整\h6.1.5繪制視圖\h6.2自定義動畫\h6.2.1任務Runnable\h6.2.2下拉刷新動畫\h6.2.3圓弧進度動畫\h6.3自定義對話框\h6.3.1對話框Dialog\h6.3.2改進的日期對話框\h6.3.3自定義多級對話框\h6.4自定義通知欄\h6.4.1通知推送Notification\h6.4.2進度條ProgressBar\h6.4.3遠程視圖RemoteViews\h6.4.4自定義通知的文本顏色設定\h6.5服務Service基礎\h6.5.1Service的生命周期\h6.5.2推送服務到前臺\h6.6實戰項目:手機安全助手\h6.6.1設計思路\h6.6.2小知識:應用包管理器PackageManager\h6.6.3代碼示例\h6.7小結\h第7章組合控件\h7.1標簽欄\h7.1.1標簽按鈕\h7.1.2實現底部標簽欄\h7.2導航欄\h7.2.1工具欄Toolbar\h7.2.2溢出菜單OverflowMenu\h7.2.3搜索框SearchView\h7.2.4標簽布局TabLayout\h7.3橫幅條\h7.3.1自定義指示器\h7.3.2實現橫幅輪播Banner\h7.3.3仿京東頂到狀態欄的Banner\h7.4增強型列表\h7.4.1循環視圖RecyclerView\h7.4.2布局管理器LayoutManager\h7.4.3動態更新循環視圖\h7.5材質設計庫\h7.5.1協調布局CoordinatorLayout\h7.5.2應用欄布局AppBarLayout\h7.5.3可折疊工具欄布局CollapsingToolbarLayout\h7.6實戰項目:仿支付寶的頭部伸縮特效\h7.6.1設計思路\h7.6.2小知識:導航欄的滾動標志\h7.6.3代碼示例\h7.7實戰項目:仿淘寶主頁\h7.7.1設計思路\h7.7.2小知識:下拉刷新布局SwipeRefreshLayout\h7.7.3代碼示例\h7.8小結\h第8章調試與上線\h8.1調試工作\h8.1.1模擬器調試\h8.1.2真機調試\h8.1.3導出APK安裝包\h8.2準備上線\h8.2.1版本設置\h8.2.2上線模式\h8.2.3數據加密\h8.3安全加固\h8.3.1反編譯\h8.3.2代碼混淆\h8.3.3第三方加固及重簽名\h8.4發布到應用商店\h8.4.1注冊開發者賬號\h8.4.2創建并提交應用\h8.5小結\h第9章設備操作\h9.1攝像頭\h9.1.1表面視圖SurfaceView\h9.1.2使用Camera拍照\h9.1.3紋理視圖TextureView\h9.1.4使用Camera2拍照\h9.1.5運行時動態授權管理\h9.2麥克風\h9.2.1拖動條SeekBar\h9.2.2音量控制\h9.2.3錄音與播音\h9.2.4錄像與放映\h9.3傳感器\h9.3.1傳感器的種類\h9.3.2搖一搖——加速度傳感器\h9.3.3指南針——磁場傳感器\h9.3.4計步器、感光器和陀螺儀\h9.4手機定位\h9.4.1開啟定位功能\h9.4.2獲取定位信息\h9.5短距離通信\h9.5.1NFC近場通信\h9.5.2紅外遙控\h9.5.3藍牙BlueTooth\h9.6實戰項目:仿微信的發現功能\h9.6.1設計思路\h9.6.2小知識:全球衛星導航系統\h9.6.3代碼示例\h9.7小結\h第10章網絡通信\h10.1多線程\h10.1.1消息傳遞Message\h10.1.2進度對話框ProgressDialog\h10.1.3異步任務AsyncTask\h10.1.4異步服務IntentService\h10.2HTTP接口訪問\h10.2.1網絡連接檢查\h10.2.2移動數據格式JSON\h10.2.3JSON串與實體類自動轉換\h10.2.4HTTP接口調用\h10.2.5HTTP圖片獲取\h10.3上傳和下載\h10.3.1下載管理器DownloadManager\h10.3.2文件對話框\h10.3.3文件上傳\h10.4套接字Socket\h10.4.1網絡地址InetAddress\h10.4.2Socket通信\h10.5實戰項目:仿應用寶的應用更新功能\h10.5.1設計思路\h10.5.2小知識:查看APK文件的包信息\h10.5.3代碼示例\h10.6實戰項目:仿手機QQ的聊天功能\h10.6.1設計思路\h10.6.2小知識:可折疊列表視圖ExpandableListView\h10.6.3代碼示例\h10.7小結\h第11章事件\h11.1按鍵事件\h11.1.1檢測軟鍵盤\h11.1.2檢測物理按鍵\h11.1.3音量調節對話框\h11.2觸摸事件\h11.2.1手勢事件的分發流程\h11.2.2手勢事件處理MotionEvent\h11.2.3手寫簽名\h11.3手勢檢測\h11.3.1手勢檢測器GestureDetector\h11.3.2飛掠視圖ViewFlipper\h11.3.3手勢控制橫幅輪播\h11.4手勢沖突處理\h11.4.1上下滾動與左右滑動的沖突處理\h11.4.2內部滑動與翻頁滑動的沖突處理\h11.4.3正常下拉與下拉刷新的沖突處理\h11.5實戰項目:摳圖神器——美圖變變\h11.5.1設計思路\h11.5.2小知識:二維圖像的基本加工\h11.5.3代碼示例\h11.6實戰項目:虛擬現實的全景圖庫\h11.6.1設計思路\h11.6.2小知識:三維圖形接口OpenGL\h11.6.3代碼示例\h11.7小結\h第12章動畫\h12.1幀動畫\h12.1.1幀動畫的實現\h12.1.2顯示GIF動畫\h12.1.3淡入淡出動畫\h12.2補間動畫\h12.2.1補間動畫的種類\h12.2.2補間動畫的原理\h12.2.3集合動畫\h12.2.4在飛掠橫幅中使用補間動畫\h12.3屬性動畫\h12.3.1屬性動畫的用法\h12.3.2屬性動畫組合\h12.3.3插值器和估值器\h12.4矢量動畫\h12.4.1矢量圖形\h12.4.2可縮放矢量圖形SVG標記\h12.4.3利用屬性動畫實現矢量動畫\h12.4.4仿支付寶的支付成功動畫\h12.5動畫的實現手段\h12.5.1使用延時重繪\h12.5.2設置狀態參數\h12.5.3滾動器Scroller\h12.6實戰項目:仿QQ空間的動感影集\h12.6.1設計思路\h12.6.2小知識:畫布的繪圖層次\h12.6.3代碼示例\h12.7小結\h第13章多媒體\h13.1相冊\h13.1.1畫廊Gallery\h13.1.2圖像切換器ImageSwitcher\h13.1.3圖片查看器——青青相冊\h13.2音頻播放\h13.2.1鈴聲Ringtone\h13.2.2聲音池SoundPool\h13.2.3音軌錄播AudioTrack\h13.3視頻播放\h13.3.1視頻視圖VideoView\h13.3.2媒體控制條MediaController\h13.3.3自定義播放控制條\h13.4多窗口\h13.4.1分屏——多窗口模式\h13.4.2畫中畫——特殊的多窗口\h13.4.3自定義懸浮窗\h13.4.4截圖和錄屏\h13.5實戰項目:影視播放器——愛看劇場\h13.5.1設計思路\h13.5.2小知識:豎屏與橫屏切換\h13.5.3代碼示例\h13.6實戰項目:音樂播放器——浪花音樂\h13.6.1設計思路\h13.6.2小知識:可變字符串SpannableString\h13.6.3代碼示例\h13.7小結\h第14章融合技術\h14.1網頁集成\h14.1.1資產管理器AssetManager\h14.1.2網頁視圖WebView\h14.1.3簡單瀏覽器\h14.2JNI開發\h14.2.1NDK環境搭建\h14.2.2創建JNI接口\h14.2.3JNI實現加解密\h14.3局域網共享\h14.3.1無線網絡管理器WifiManager\h14.3.2連接指定WiFi\h14.3.3開關熱點\h14.3.4點對點藍牙傳輸\h14.4實戰項目:共享經濟弄潮兒——WiFi共享器\h14.4.1設計思路\h14.4.2小知識:NetBIOS協議\h14.4.3代碼示例\h14.5實戰項目:筆墨飄香之電子書架\h14.5.1設計思路\h14.5.2小知識:PDF文件渲染器PdfRenderer\h14.5.3代碼示例\h14.6小結\h第15章第三方開發包\h15.1地圖SDK\h15.1.1查看簽名信息\h15.1.2百度地圖\h15.1.3高德地圖\h15.2分享SDK\h15.2.1QQ分享\h15.2.2微信分享\h15.3支付SDK\h15.3.1支付寶支付\h15.3.2微信支付\h15.4語音SDK\h15.4.1文字轉語音TextToSpeech\h15.4.2語音識別\h15.4.3語音合成\h15.5實戰項目:仿滴滴打車\h15.5.1設計思路\h15.5.2小知識:評分條RatingBar\h15.5.3代碼示例\h15.6小結\h第16章性能優化\h16.1布局文件優化\h16.1.1減少重復布局\h16.1.2自適應調整布局\h16.1.3自定義窗口主題\h16.2內存泄漏處理\h16.2.1內存泄漏的檢測\h16.2.2內存泄漏的發生\h16.2.3內存泄漏的預防\h16.3線程池管理\h16.3.1普通線程池\h16.3.2定時器線程池\h16.4省電模式\h16.4.1檢測當前電量\h16.4.2檢測屏幕開關\h16.4.3休眠模式對App的影響\h16.5實戰項目:網絡圖片緩存框架\h16.5.1設計思路\h16.5.2小知識:LRU緩存策略\h16.5.3代碼示例\h16.6小結\h附錄\h附錄一仿流行App的常用功能\h附錄二Android各版本的新增功能說明\h附錄三手機硬件與App開發的關聯\h附錄四專業術語索引第1章
AndroidStudio環境搭建本章主要介紹如何在個人電腦上安裝AndroidStudio和相應的配套環境,并通過一個簡單的App“HelloWorld”演示AndroidStudio的常用操作與App開發、運行的流程,還介紹了App的工程結構和開發過程中的準備工作。1.1AndroidStudio簡介Android是基于Linux的移動設備操作系統,中文名為安卓,主要用于智能手機與平板電腦,現已拓展至互聯網電視、可穿戴設備、車載終端、智能家居等等。Android與iOS同為智能手機市場的兩大操作系統,但安卓系統的全球市場份額大幅領先于蘋果。在中國大陸,Android的市場份額更是遙遙領先,據2018年4月的移動系統調研報告,Android在中國的市場份額為86%,其余份額為iOS。早期,在Android下開發App主要使用Eclipse和基于Eclipse的ADT。不過Eclipse畢竟是為Java工程而生的開發平臺,并非專門用于Android,所以先天性不足難以避免。自2015年之后,谷歌公司便停止了ADT的版本更新,轉而重點打造自家的AndroidStudio。AndroidStudio是谷歌公司推出的Android應用開發環境,與基于Eclipse的ADT不同,AndroidStudio是個全新的開發環境,擁有更強大的功能和更高效的性能。本文使用的AndroidStudio為2018年4月發布的3.1.2版本,同時支持Windows、MacOSX和Linux。使用AndroidStudio比起使用Eclipse開發有如下好處:(1)AndroidStudio使用v7庫與design庫等只需增加一行配置,而Eclipse要想使用這些庫得引用整個工程。(2)高版本的SDK與NDK只支持AndroidStudio,不支持Eclipse。(3)更多新功能只能在AndroidStudio中運用,如自動保存、多渠道打包、整合版本管理、支持預覽drawable圖形文件等。1.2AndroidStudio的安裝既然AndroidStudio有眾多優點,又是App開發大趨勢的主流工具,接下來就讓我們一步一步地在自己的電腦上安裝AndroidStudio。1.2.1開發機配置要求工欲善其事,必先利其器。要想保證AndroidStudio的運行速度,開發用的電腦配置就要跟上?,F在一般用筆記本電腦開發App,下面是開發機的基本配置:(1)內存最低要求4GB,推薦8GB,越大越好。(2)CPU要求1.5GHz以上,越快越好。(3)硬盤要求系統盤剩余空間10GB以上,越大越好。(4)要求帶無線網卡、攝像頭,USB與麥克風正常使用。(5)如果操作系統是Windows,那么至少為Windows7,不支持WindowsXP。1.2.2安裝依賴的軟件AndroidStudio作為Android應用的開發環境,仍然依賴于JDK、SDK和NDK三種開發工具。1.JDKJDK是Java語言的編譯器,全稱為JavaDevelopmentKit,即Java開發工具包。因為Android應用采用Java語言開發,所以開發機上要先安裝JDK,下載地址為/technetwork/java/javase/downloads/index.html。JDK建議安裝1.8及以上版本,原因是不同的Android版本對JDK有相應的要求,如Android5.0默認使用jdk1.7編譯,Android7.0默認使用jdk1.8編譯。如果JDK為1.6或1.7,而SDK為最新版本,就可能導致如下問題:(1)創建項目后,瀏覽布局文件設計圖時會報錯AndroidNrequirestheIDEtoberunningwithJava1.8orlater。(2)編譯項目失敗,提示錯誤com/android/dx/command/dexer/Main:Unsupportedmajor.minorversion52.0。(3)運行App失敗,提示錯誤compileSdkVersion'android-24'requiresJDK1.8orlatertocompile.裝好JDK后,還要在環境變量的系統變量中添加JAVA_HOME,取值為JDK的安裝目錄,例如D:\ProgramFiles(x86)\Java\jdk1.8.0_102。添加系統變量CLASSPATH,取值為.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\bin。并在系統變量Path末尾添加;%JAVA_HOME%\bin。2.SDKSDK是Android應用的編譯器,全稱為SoftwareDevelopmentKit,即軟件開發工具包。SDK提供了App開發的常用工具合集,主要包括:build-tools目錄,存放各版本Android的各種編譯工具。docs目錄,存放開發說明文檔。extras\android目錄,存放兼容低版本的新功能支持庫,比如android-support-v4.jar、v7的各種支持庫、v13以上兼容庫等。platforms目錄,存放各版本Android的資源文件。platform-tools目錄與tools目錄,存放常用的開發輔助工具,如數據庫管理工具sqlite3.exe、模擬器管理工具emulator.exe。samples目錄,存放各版本Android常用功能的demo源碼。sources目錄,存放各版本Android的API開放接口源碼。system-images目錄,存放模擬器各版本的系統鏡像與管理工具。SDK可以單獨安裝,也可以與AndroidStudio一起安裝,單獨安裝的下載頁面入口地址是/。建議通過AndroidStudio安裝SDK,因為這樣避免了一些兼容性與環境設置問題。無論是單獨安裝還是一起安裝,裝好SDK后都要在環境變量的系統變量中添加ANDROID_HOME,取值為SDK的安裝目錄,例如D:\Android\sdk。并在系統變量Path末尾添加;%ANDROID_HOME%\tools。3.NDKNDK是C/C++代碼的編譯器,全稱為NativeDevelopmentKit,意即原生開發工具包。該工具包主要供JNI接口使用,先把C/C++代碼編譯成so庫,然后由Java代碼通過JNI接口調用so庫。NDK的詳細安裝步驟見第14章的“14.2.1NDK環境搭建”。裝好NDK后,要在環境變量的系統變量中添加NDK_ROOT,取值為NDK的安裝目錄,例如D:\Android\android-ndk-r17。然后在系統變量Path末尾添加;%NDK_ROOT%。1.2.3安裝AndroidStudio2016年12月8日,谷歌開發者的中文網站上線了。國內開發者可直接在該網站下載AndroidStudio,詳細的下載頁面是/studio/index.html,在這里可以找到AndroidStudio的使用教程。雙擊下載完成的AndroidStudio安裝程序,彈出安裝界面,如圖1-1所示。全部勾選安裝界面中的選項,然后單擊Next按鈕。進入下一頁的安裝路徑配置頁面,如圖1-2所示,建議將AndroidStudio裝在除系統盤外的其他磁盤(比如D盤),然后單擊Next按鈕。接下來一路單擊Next按鈕,直到彈出最后一頁,單擊Install按鈕,等待安裝過程進行。圖1-1AndroidStudio的安裝界面圖1-2選擇AndroidStudio的安裝目錄安裝完畢會跳到AndroidStudio的安裝向導界面,如圖1-3所示。單擊Next按鈕進入下一頁,如圖1-4所示。這里保持Standard選項,單擊Next按鈕;在配置界面確認SDK的安裝路徑是否正確,確認完畢繼續單擊Next按鈕;在最后一個向導界面單擊Finish按鈕,等待設置操作。接下來的下載界面會自動跳轉到谷歌網站更新組件,這里直接單擊Cancel按鈕取消下載,然后單擊Finish按鈕結束設置。最后彈出WelcometoAndroidStudio歡迎界面,如圖1-5所示。單擊第一項的StartanewAndroidStudioproject即可開始你的Android開發之旅。圖1-3安裝向導一圖1-4安裝向導二圖1-5AndroidStudio的歡迎界面注意,配置過程可能發生如下錯誤提示:(1)第一次打開AndroidStudio可能會報錯UnabletoaccessAndroidSDKadd-onlist,這個界面不用理會,單擊Cancel按鈕即可。進入AndroidStudio主界面后,依次選擇菜單File→ProjectStructure→SDKLocation,在彈出的窗口中分別設置JDK、SDK、NDK的路徑。設置完畢后再打開AndroidStudio就不會報錯了。(2)已經按照安裝步驟正確安裝,運行AndroidStudio卻總是打不開。請檢查電腦上是否開啟了防火墻,建議關閉系統防火墻及所有殺毒軟件的防火墻。關了防火墻后再重新打開AndroidStudio試試。1.2.4下載Android的SDK從AndroidStudio3.0開始,官網放出來的AndroidStudio安裝包都不帶SDK,因此首次安裝AS的開發者還要另行下載App開發需要的SDK。此外,隨著Android版本的更新換代,編譯工具與平臺工具等也需時常在線升級,故而接下來介紹如何下載最新的SDK平臺及相關工具。在AndroidStudio主界面,依次選擇菜單Tools→SDKManager,菜單路徑如圖1-6所示。圖1-6打開SDKManager的菜單路徑此時彈出AndroidSDK的管理界面,窗口右邊是一大片的SDK配置信息,初始畫面如圖1-7所示。其中AndroidSDKLocation一欄可單擊右側的Edit鏈接,進而選擇SDK下載后的保存路徑。其下的三個選項卡默認顯示SDKPlatforms,也就是各個SDK平臺的版本列表,勾選每個列表項左邊的復選框,則表示需要下載該版本的SDK平臺,然后單擊OK按鈕即可自動進行SDK的下載安裝操作。也可單擊中間的選項卡SDKTools,單擊后切換到SDK工具的管理列表,如圖1-8所示。在這個工具管理界面,能夠在線升級編譯工具BuildTools、平臺工具PlatformTools,以及開發者需要的其他工具。圖1-7SDK平臺的管理列表圖1-8SDK工具的管理列表1.3運行小應用HelloWorld成功安裝AndroidStudio后,打開其界面會發現有一堆菜單和圖標,對于這個陌生的開發環境,讀者可能會有不知所措的感覺?,F在不再逐一講解每個菜單和圖標的作用,直接開始第一個App——HelloWorld,讓我們在實踐中邊學邊用,更好地理解和吸收。1.3.1創建新項目打開AndroidStudio,依次選擇菜單File→New→NewProject,彈出CreateNewProject窗口,如圖1-9所示。在Applicationname欄輸入應用名稱,在CompanyDomain欄輸入公司域名,下面會自動合成工程的包名,選擇好項目工程的保存目錄,單擊Next按鈕。下一個界面是目標設備界面,如圖1-10所示。該界面可選擇App期望運行在什么設備上,以及運行App所需的SDK最低版本號,MinimunSDK右下方的文字提示當前版本號支持的設備市場份額。這里不做變動,按照默認勾選的PhoneandTablet即可,最低版本號也是默認的API16(支持設備的市場份額為99.2%,能夠滿足絕大部分機型)。圖1-9創建新項目圖1-10指定目標設備然后單擊Next按鈕,進入下一個界面,如圖1-11所示。該界面提示請選擇初始界面風格,這里還是保持默認的選項EmptyActivity,單擊Next按鈕。下一個界面是入口設置界面,如圖1-12所示。該界面可輸入活動名稱(ActivityName)與布局名稱(LayoutName),正常情況使用默認名稱即可,單擊OK按鈕,等待工程創建。圖1-11指定Activity界面的風格圖1-12設置入口界面的名稱工程創建完畢后,AndroidStudio自動打開activity_main.xml與MainActivity.java,并默認展示MainActivity.java的源碼,如圖1-13所示。圖1-13默認創建的MainActivityMainActivity.java上方的標簽表示該文件的路徑結構,注意源碼左側有一列標簽,從上到下依次是Project、Structure、Captures、Favorites。單擊Project標簽,左側會展開小窗口表示該項目工程的目錄結構,如圖1-14所示。單擊Structure標簽,左側會展開小窗口表示該代碼的內部方法結構,如圖1-15所示。圖1-14HelloWorld的工程結構圖1-15MainActivity的方法結構看完代碼文件再來看布局文件,單擊activity_main.xml標簽,切換到布局文件設計展示界面,如圖1-16所示。可以看到左側多了一列Palette窗口,內部是各種布局與控件列表。在Palette窗口下方有兩個標簽,分別是Design(默認選中,表示設計圖)和Text(表示源代碼)。單擊Text標簽,切換到布局文件的源碼界面,如圖1-17所示。這個布局文件是標準的XML格式,內部定義了App頁面上包含的各種控件元素及其排列組合方式。圖1-16activity_main.xml的設計圖圖1-17activity_main.xml的源代碼1.3.2編譯項目/模塊AndroidStudio與Eclipse一樣,如果代碼沒有報錯,AndroidStudio就會自動編譯,我們只需直接運行項目即可。當然有時候開發者想手動重新編譯,有以下3種編譯方式:(1)選擇菜單Build→MakeProject,編譯整個項目下的所有模塊。(2)選擇菜單Build→MakeModule***,編譯指定名稱的模塊。(3)選擇菜單Build→CleanProject,然后選擇菜單Build→RebuildProject,先清理項目,再對整個項目重新編譯。下面先認識一下任務欄上的幾個常用圖標,后面會經常用到它們。圖1-18任務欄上的常用圖標在圖1-18中,倒數第4個豎屏圖標是AVDManager按鈕,單擊該按鈕會彈出模擬器的管理窗口;倒數第5個向下箭頭圖標是SDKManager,單擊該按鈕會彈出SDK版本的管理窗口。1.3.3創建模擬器圖1-19運行App選擇接入設備所謂模擬器,是指在電腦上構造一個演示窗口,模擬手機屏幕上的App運行效果。App通過編譯后,要選擇一個接入設備來運行,依次選擇菜單Run→Run'app'(也可按快捷鍵Shift+F10),AndroidStudio會彈出新窗口SelectDeploymentTarget,如圖1-19所示。對初學者來說,一開始沒有可用的模擬器,得創建新模擬器,單擊CreateNewEmulator按鈕,彈出模擬器的配置界面,如圖1-20所示。按照默認配置即可,單擊Next按鈕。下一個界面是SDK版本的選擇界面,如圖1-21所示。單擊第3個標簽OtherImages,在列表中選擇第一個Lollipop(即Android5.1),表示接下來創建的模擬器是基于Android5.1系統的。然后單擊Next按鈕,進入最后的確認界面,在確認界面右下角單擊Finish按鈕,等待模擬器的創建。圖1-20選擇模擬器的分辨率圖1-21選擇模擬器的SDK版本1.3.4在模擬器上運行App模擬器創建完成后,重新依次選擇菜單Run→Run'app',這時彈出的窗口中會出現剛才創建的模擬器,名稱為Nexus4API22,如圖1-22所示。圖1-22接入設備界面出現新創建的模擬器選中該模擬器,單擊OK按鈕,等待AndroidStudio啟動模擬器。關于模擬器的啟動結果,可以查看主界面下方的提示窗口,如圖1-23所示。提示窗口有左右兩個小窗口,左側窗口的左上角有一個logcat標簽,用于展示App的運行日志;右側窗口的右下角有一個GradleConsole標簽,用于展示App工程的編譯與啟動情況。圖1-23App運行結果跟蹤窗口如果在GradleConsole窗口提示編譯或啟動失敗,就按照提示信息進行處理。如果GradleConsole窗口提示成功,等待模擬器啟動完成后,就會出現類似手機的模擬器界面,如圖1-24所示。把模擬器屏幕下方中間的解鎖圖像向上拖動,使得屏幕解鎖成功,這時進入App的啟動界面HelloWorld,如圖1-25所示。圖1-24模擬器啟動完成屏幕圖1-25HelloWorld的啟動界面如果App啟動界面正常展示,那么恭喜你,第一個HelloWorldApp就這樣成功了。都說萬事開頭難,前面克服了各種困難,終于搭建好AndroidStudio的開發環境,并且成功運行了第一個App——HelloWorld,不過這只是萬里長征的第一步,接下來還有更奇妙的Android世界等著我們去探索。1.4App的工程結構上一節在模擬器上成功地運行了第一個App(HelloWorld),接下來好好研究一下它的工程結構。每個App的工程結構都差不多,只要掌握了基本結構,后面開發起來就會得心應手。1.4.1工程目錄說明AndroidStudio的工程創建分兩個層級:第一個層級通過菜單File→New→NewProject創建,這里的新項目是指新的工作空間,對應Eclipse的workspace;第二個層級通過菜單File→New→NewModule創建,這里的新模塊是指一個單獨的App工程,對應Eclipse的project。第一次運行AndroidStudio都是選擇NewProject,表示先創建一個工作空間;后面還想創建新的App工程時,只需選擇NewModule,表示在當前工作空間下新建一個App工程。例如,圖1-26是之前HelloWorld工程的目錄結構圖。圖1-26HelloWorld工程的目錄結構圖從結構圖中可以看到,該工程下面有兩個目錄:一個是app,另一個是GradleScripts。其中,app下面又有3個子目錄,功能說明如下:(1)manifests子目錄,下面只有一個xml文件,即AndroidManifest.xml,是App的運行配置文件。(2)java子目錄,下面有3個com.example.hellorworld包,其中第一個包存放的是App工程的java源代碼,后面兩個包存放的是測試用的Java代碼。(3)res子目錄,存放的是App工程的資源文件。res子目錄下又有4個子目錄:drawable目錄存放的是圖形描述文件與用戶圖片。layout目錄存放的是App頁面的布局文件。mipmap目錄存放的是啟動圖標。values目錄存放的是一些常量定義文件,比如字符串常量strings.xml、像素常量dimens.xml、顏色常量colors.xml、樣式風格定義styles.xml等。GradleScripts下面主要是工程的編譯配置文件,主要有:(1)build.gradle,該文件分為項目級與模塊級兩種,用于描述App工程的編譯規則。(2),該文件用于描述java文件的代碼混淆規則。(3)perties,該文件用于配置編譯工程的命令行參數,一般無須改動。(4)settings.gradle,配置哪些模塊在一起編譯。初始內容為include':app',表示只編譯App模塊。(5)perties,項目的本地配置,一般無須改動。該文件是在工程編譯時自動生成的,用于描述開發者本機的環境配置,比如SDK的本地路徑、NDK的本地路徑等。1.4.2編譯配置文件build.gradle項目級別的build.gradle一般無須改動,讀者只需關注模塊級別的build.gradle。下面在初始的build.gradle文件中補充文字注釋,方便讀者更好地理解每個參數的用途。1.4.3App運行配置AndroidManifest.xmlAndroidManifest.xml用于指定App內部的運行配置,是一個XML描述文件,根節點為manifest,根節點的package指定了該App的包名。manifest下面又有若干子節點,分別說明如下:(1)uses-sdk,該節點有兩個屬性:android:minSdkVersion和android:targetSdkVersion。這兩個屬性是早期Eclipse開發App時使用的,現在這兩個字段改成放到build.gradle文件中,故而AndroidStudio不配置uses-sdk也沒有關系。(2)uses-permission,該節點用于聲明App運行過程中需要的權限名稱。例如,訪問網絡需要上網權限,拍照需要攝像頭權限,定位需要定位權限等。(3)application,該節點用于指定App的自身屬性,默認的屬性說明如下:android:allowBackup,用于指定是否允許備份,開發階段設置為true,上線時設置為false。android:icon,用于指定該App在手機屏幕上顯示的圖標。android:label,用于指定該App在手機屏幕上顯示的名稱。android:supportsRtl,設置為true表示支持阿拉伯語/波斯語這種從右往左的文字排列順序。android:theme,用于指定該App的顯示風格。application節點下還有幾個子節點,比如活動activity、服務service、廣播接收器receiver、內容提供器provider等,這些子節點的詳細屬性會在后續章節詳細說明。1.4.4在代碼中操縱控件在一開始創建HelloWorld工程時,AndroidStudio默認打開了兩個文件,分別是布局文件activity_main.xml和代碼文件MainActivity.java。下面先看布局文件activity_main.xml的內容:這里可以看到xml文件中只有兩個節點,分別是RelativeLayout和TextView。再仔細看看,有沒有發現熟悉的“HelloWorld”?沒錯,模擬器App界面顯示的HelloWorld就來自于這里,也就是TextView控件的android:text屬性值。可以把這里的HelloWorld改為其他文字,比如“你好、世界”或ILoveAndroid,改完保存文件后再依次選擇菜單Run→Run'app',看看App界面上的文字是不是變成新的了?當然,我們的目標并不僅限于在布局文件中修改文字,還要能夠在代碼中修改文字的內容。再次打開代碼文件MainActivity.java,看看里面有什么內容。該java文件中MainActivity類的內容如下:這里可以看出,MainActivity.java的代碼內容很簡單,只有一個MainActivity類,該類下面只有一個函數onCreate。注意onCreate內部的setContentView方法直接引用了布局文件的名字activity_main,該方法的意思是往App界面填充activity_main.xml的布局內容?,F在我們要在這里改動改動,加點“綠葉紅花”讓它好看一些。首先打開activity_main.xml,在TextView節點下方補充一行android:id="@+id/tv_hello";然后回到MainActivity.java,在setContentView方法下面補充幾行代碼,具體如下:圖1-27修改文字后的HelloWorld界面保存文件后依次選擇菜單Run→Run'app',模擬器上的App界面就變成了如圖1-27所示的樣子。現在不但文字內容改變了,文字顏色和字體大小也發生了變化。怎么樣,是不是很有成就感呢?好的開始是成功的一半,現在大家初步學會了在代碼中操作控件,下一章進一步學習在App界面上人機交互。1.5準備開始俗話說得好,磨刀不誤砍柴工。盡管前面我們已經初步學會了通過代碼操作控件,不過為了后面介紹Android更順利些,建議讀者先了解本節的準備工作。即使已經迫不及待要進入Android的開發世界,也萬萬不可跳過本節直接翻到第2章,心急可吃不了熱豆腐哦。1.5.1使用快捷鍵就像在Eclipse上進行java開發一樣,善用快捷鍵會讓開發者提高工作效率,AndroidStudio也是一樣,下面是使用AndroidStudio開發App常用的快捷鍵。Ctrl+S:保存文件。Ctrl+Z:撤銷上次的編輯。Ctrl+Shift+Z:重做上次的編輯,建議改為Ctrl+Y,與Eclipse、UEStudio等工具保持一致。AndroidStudio默認Ctrl+Y為刪除當前行,這點不太好,當你習慣按Ctrl+Y重做上次編輯時,系統卻刪除了當前行,非常不便。Ctrl+C:復制。Ctrl+X:剪切。Ctrl+V:粘貼。Ctrl+A:全選。Delete:刪除。Ctrl+F:查詢。Ctrl+R:替換。Ctrl+/:注釋選中代碼(在每行代碼前面加雙斜桿)。Ctrl+Shift+/:注釋選中的代碼段(在選中的代碼段前面加“/*”,后面加“*/”)。Ctrl+Alt+L:格式化選中的代碼段。注意該快捷鍵與QQ默認的熱鍵(鎖定QQ)沖突,建議更換快捷鍵,或者刪除QQ的同名熱鍵。Shift+F6:重命名。建議改為F2,與Wnidows和Eclipse的使用習慣保持一致。Alt+Enter:給光標所在位置的類導入相應的包。Shift+F10:運行當前模塊。Ctrl+F5:清理并重新運行當前模塊。當然,每個人習慣的快捷鍵不盡相同,對于AndroidStudio來說也不例外,為了更好地使用快捷鍵,最好手工修改快捷鍵。手工修改快捷鍵的方法:依次選擇菜單File→Settings,在彈出的設置窗口中選擇Keymap,窗口右側出現如圖1-28所示的快捷鍵列表。圖1-28快捷鍵設置界面在設置界面選中某條快捷鍵,右擊或單擊上方的鉛筆按鈕,在彈出的菜單中選擇AddKeyboardShortcut,然后在鍵盤上按你要設置的快捷鍵組合,單擊OK按鈕,即可完成對應的快捷鍵設置。1.5.2安裝SVN工具在企業里面開發App都是團隊合作,需要對代碼進行統一管理,而且App每隔一兩周便發布一個新版本,這也要求做好工程代碼的版本控制。因此,企業開發App都會運用版本控制工具管理工程源碼,最常見的版本控制工具是SVN。AndroidStudio自帶了SVN插件(Subversion),但是還需要開發者進行相關配置才能正常使用SVN功能。具體配置步驟如下:步驟01在本機上安裝TortoiseSVN。首先下載TortoiseSVN安裝包,然后在安裝時選擇commandlineclienttools,這樣安裝后在bin目錄下才能找到命令行工具svn.exe。步驟02在AndroidStudio中配置TortoiseSVN的命令行工具。打開AndroidStudio,依次選擇菜單File→Settings→VersionControl→Subversion→usercommandlineclient,單擊右側的瀏覽按鈕,選擇本地安裝的svn.exe的完整路徑。步驟03在AndroidStudio中使用SVN檢出項目。打開AndroidStudio,依次選擇菜單VCS→CheckoutfromVersionControl→Subversion,單擊Repositories右方的加號按鈕,在彈出的小窗口中輸入SVN倉庫地址,單擊OK按鈕,回到原窗口單擊Checkout按鈕,把項目檢出到本地目錄。項目檢出完畢后,在開發過程中要及時把改好的代碼提交到SVN,同時要及時從SVN更新別人改過的代碼到本地。下面是SVN更新/提交的方法:(1)把代碼提交給SVN服務器:選中并右擊工程目錄,依次選擇菜單Subversion→CommitFile...,表示向SVN服務器提交本地改過的文件。(2)從SVN服務器更新代碼:選中并右擊工程目錄,依次選擇菜單Subversion→UpdateFile...,表示從SVN服務器更新文件到本地目錄。1.5.3安裝常用插件在AndroidStudio中安裝插件的步驟與Eclipse類似,具體步驟為:依次選擇菜單File→Settings→Plugins→下方按鈕Browserrepositories...,彈出當前可用插件列表窗口,如圖1-29所示。圖1-29安裝插件窗口在安裝插件窗口的Category框中選擇Codetools,然后選中左邊列表的指定插件,再單擊右邊窗口內部的Install按鈕,安裝后重啟Studio即可正常使用該插件的功能。下面是5個常用的Studio插件:1.AndroidParcelablecodegenerator該插件可自動生成Parcelable接口的代碼。開發者先寫好一個類和內部變量的定義,然后在代碼中按Alt+Insert,彈出的菜單列表下方就有Parcelable選項,如圖1-30所示。選中該選項,即在類中插入實現Parcelable接口的代碼。2.AndroidCodeGenerator該插件可根據布局文件快速生成對應的Activity、Fragment、Adapter、Menu等代碼。在布局文件上右擊或者在布局文件內部右擊,彈出的菜單中多了一個GenerateAndroidCode選項,具體的菜單如圖1-31所示。選中生成項后,便會彈出代碼窗口,把已生成的代碼復制出來即可。注意該插件對漢字的支持不太好,如果XML文件中有漢字,代碼就會生成失敗。圖1-30Parcelable插件圖1-31GenerateAndroidCode插件菜單3.GsonFormat該插件能夠快速將JSON字符串轉換成代碼段,包含變量定義以及set、get函數。在代碼中按Alt+S,彈出JSON格式化窗口,往窗口中粘貼JSON字符串,單擊OK按鈕,即可在代碼中插入生成好的代碼段。GsonFormat窗口如圖1-32所示。圖1-32GsonFormat插件4.AndroidPostfixCompletion該插件支持在代碼中快速生成Toast、Log等代碼行。開發者在代碼中輸入字符串,后面跟上.toast并回車,即可生成Toast.makeText代碼行;輸入字符串后,緊接著輸入.log并回車,即可生成Log.d代碼行,如圖1-33所示。圖1-33Postfix插件使用截圖5.AndroidDrawableImporter圖1-34Drawable插件菜單該插件可對一張圖片自動生成不同分辨率的圖片,從而讓圖片對不同屏幕的適配工作變得更加容易。右擊任意目錄,在彈出的菜單中選擇New,右方彈出的菜單列表末尾會出現***DrawableImporter之類的菜單項,如圖1-34所示。這里通常選中BatchDrawableImport,在彈出的窗口中選擇圖片的文件路徑,并勾選需要自動生成的分辨率,然后單擊OK按鈕,即可在drawabe各分辨率的目錄下生成對應的圖片。1.5.4導入已經存在的工程初學者一開始學習App開發,免不了想借鑒他人的編碼思路,這就需要將網上的開源工程導入到本地。根據App工程提供的組織形式,存在兩種方法可以導入到AndroidStudio。如果下載下來的App工程是Project項目形式,則依次選擇菜單File→Open,然后在彈出的對話框中選擇工程目錄,即可完成該工程的導入操作。如果下載下來的App工程是Module模塊形式,則不能把它當作項目導入,否則會出現“Pluginwithid'com.android.application'notfound.”的錯誤。此時只能模塊的形式導入該App工程,具體的導入步驟如下:(1)依次選擇菜單File→New→NewProject,按提示新建一個項目(即Project)。(2)項目創建完畢,再依次選擇菜單File→New→ImportModule,然后在彈出的對話框中選擇模塊目錄。在AndroidStudio2.2/2.3/3.0中,按照上述步驟能夠正常導入App模塊,但是若在AndroidStudio3.1中導入App模塊,會發現AS死活無法正常導入。此時除了先進行以上的兩個導入步驟之外,還要額外進行以下的第三個步驟:(3)打開當前項目的settings.gradle,把下面這行:
include':app'
改成下面這樣,也就是手動添加新模塊的名稱:
include':app',':新模塊的名稱'
修改完畢,重啟AndroidStudio,再次打開后AS就會自動編譯新模塊了。1.5.5新建一個Activity頁面在前面的“1.4.4在代碼中操縱控件”中,我們已經嘗試修改XML文件與Java代碼,但這是在現有文件上進行修改,如果要增加一個新的頁面,就得先創建新頁面對應的XML布局和Java文件了。具體的頁面創建步驟如下:在左側工程結構圖中,選定新頁面所在的包名如com.example.helloworld,然后右擊該包名,并在彈出的右鍵菜單中依次選擇New→Activity→EmptyActivity,右鍵菜單如圖1-35所示。圖1-35創建Activity頁面的右鍵菜單此時會彈出新頁面的創建對話框如圖1-36所示,其中ActivityName一欄填寫頁面的Java類名,LayoutName一欄填寫頁面的XML布局名稱,PackageName保持默認的包名,確認無誤后單擊窗口右下方的Finish按鈕。圖1-36創建Activity頁面的信息填寫窗口接著AndroidStudio會自動在默認包名下面生成頁面代碼Main2Activity.java,在res\layout下面生成頁面布局activity_main2.xml,新頁面創建之后的工程結構如圖1-37所示。圖1-37新頁面創建之后的工程目錄結構上述操作步驟雖然一次性生成了Java代碼及其對應的XML布局,可是實際開發中往往還需要單獨生成Java代碼,或者單獨生成XML文件。創建單個文件的操作那更簡單了,倘若是創建單個Java代碼文件,則需右擊工程目錄的包名,在右鍵菜單中依次選擇New→JavaClass,此時彈出新類的創建對話框如圖1-38所示。在該窗口的Name一欄填寫Java的類名,在Superclass一欄填寫父類的名稱(如果有的話),最后單擊窗口下方的OK按鈕,即可完成Java代碼的創建操作。倘若是創建單個XML布局文件,則需右擊layout目錄,在右鍵菜單中依次選擇New→XML→LayoutXMLFile,此時彈出XML的創建對話框如圖1-39所示。在該窗口的LayoutFileName一欄填寫布局文件的名稱,在RootTag一欄填寫XML的根節點名稱,最后單擊窗口右下方的Finish按鈕,即可完成XML布局文件的創建操作。圖1-38創建Java代碼的對話框圖1-39創建XML布局的對話框1.6小結本章主要介紹了App開發環境——AndroidStudio環境的搭建。AndroidStudio作為一個集成開發環境,依賴于3個開發工具:JDK、SDK、NDK。從創建最簡單的HelloWorld項目開始,依次介紹了項目創建、項目編譯、模擬器創建、在模擬器上運行App這一連串開發流程。為了讓讀者有更理性的認識,又逐步講解了App的工程目錄結構、編譯配置文件build.gradle的使用說明、App運行配置文件AndroidManifest.xml的節點說明、如何在代碼中簡單操作控件等。最后對開發過程中的準備工作做了必要的說明,主要包括如何使用快捷鍵、如何使用SVN進行版本管理、如何安裝和使用常見插件、如何導入已經存在的工程、如何新建一個Activity頁面。通過本章的學習,讀者應該獲得了AndroidStudio的基本操作技能,能夠使用自己搭建的AndroidStudio環境創建簡單的App并在模擬器上運行,并具備進一步提高的學習基礎。第2章
初級控件本章介紹Android屏幕顯示與初級視圖的相關知識,主要包括屏幕顯示基礎、簡單布局的用法、簡單控件的用法、簡單圖形的用法。并且結合本章所學的知識,演示了一個實戰項目“簡單計算器”的設計與實現。2.1屏幕顯示本節從最基礎的顯示單元開始介紹,講述了移動設備如何在屏幕上展現豐富多彩的界面。本節主要內容包括像素的幾個常用單位、顏色的編碼與使用、屏幕分辨率的獲取等。2.1.1像素老子曾說“天下難事必作于易,天下大事必作于細”,Android開發也是如此??v使App的界面千變萬化、絢麗多姿,也都歸因于數百萬個像素的組合排列,就像萬物皆由原子構成一般。像素看似簡單,實際有大學問,如果對像素單位不知其所以然,開發時只知一根筋的填數字,結果在模擬器上運行得很好的界面,在真機上很可能顯示得東倒西歪,這就是沒打好基礎的緣故。如果一開始就把像素的基本概念弄清楚,后面就會少走很多彎路,開發起來也會更加得心應手。Android支持的像素單位有:px(像素)、in(英寸)、mm(毫米)、pt(磅,1/72英寸)、dp(與設備無關的顯示單位)、dip(就是dp)、sp(用于設置字體大?。?。其中,常用的有px、dp和sp三種。具體來說,px是手機屏幕上可顯示的最小單位,與物理設備的顯示屏有關。一般來說,同樣尺寸的屏幕(比如5寸的手機)看起來越清晰,像素的密度越高,以px計量的分辨率也越大。dp與物理設備無關,只與屏幕的尺寸有關。一般來說,同樣尺寸的屏幕以dp計量的分辨率是一樣的,無論這個手機是哪個廠家生產的,dp大小都一樣。sp的原理跟dp差不多,專門用于設置字體大小。手機在系統設置里可以調整字體的大?。ㄐ ⑵胀?、大、超大)。設置普通字體時,同數值dp和sp的文字看起來一樣大;如果設置為大字體,用dp設置的文字沒有變化,用sp設置的文字就變大了。例如,當系統設置普通字體時,18dp與18sp的文字一樣大,如圖2-1所示;當系統設置大字體時,18dp的文字大小不變,18sp的文字卻增大了,如圖2-2所示。圖2-1普通字體的效果圖圖2-2大字體的效果圖所以說,dp與系統設置的字體大小沒有關系,而sp會隨系統設置的字體大小變大或變小。dp和px之間的聯系取決于具體設備上的像素密度,像素密度就是DisplayMetrics里的density參數。當density=1.0時,表示一個dp值對應一個px值;當density=1.5時,表示兩個dp值對應3個px值;當density=2.0時,表示一個dp值對應兩個px值。具體的轉換函數如下:在XML布局文件中,為了讓不同設備屏幕擁有統一的顯示效果,除了sp用于設置文字大小外,其余要用尺寸大小的地方都用dp。在代碼中情況又有所不同,Android用于設置大小的函數都以px為單位。無論是LayoutParams里的width和height,還是setMargins和setPadding,參數單位都是px,要想在代碼中使用dp設置布局大小或間距,得先把dp值轉換成px值。代碼示例如下:
//將10dp的尺寸大小轉換為對應的px數值
intdip_10=Utils.dip2px(this,10L);
//從布局文件中獲取名叫tv_padding的文本視圖
TextViewtv_padding=findViewById(R.id.tv_padding);
//設置該文本視圖的內部文字與控件四周的間隔大小
tv_padding.setPadding(dip_10,dip_10,dip_10,dip_10);
2.1.2顏色在Android中,顏色值由透明度alpha和RGB(紅、綠、藍)三原色定義,有八位十六進制數與六位十六進制數兩種編碼,例如八位編碼FFEEDDCC,FF表示透明度,EE表示紅色的濃度,DD表示綠色的濃度,CC表示藍色的濃度。透明度為FF表示完全不透明,為00表示完全透明。RGB三色的數值越大顏色越濃也就越亮,數值越小顏色越暗。亮到極致就是白色,暗到極致就是黑色,這樣記就不會搞混了。六位十六進制編碼有兩種情況,在XML文件中默認不透明(透明度為FF),在代碼中默認透明(透明度為00)。下面的代碼分別給兩個文本控件設置六位編碼和八位編碼的背景色。
//從布局文件中獲取名叫tv_code_six的文本視圖
TextViewtv_code_six=findViewById(R.id.tv_code_six);
//給文本視圖tv_code_six設置背景為透明的綠色,透明就是看不到
tv_code_six.setBackgroundColor(0x00ff00);
//從布局文件中獲取名叫tv_code_eight的文本視圖
TextViewtv_code_eight=findViewById(R.id.tv_code_eight);
//給文本視圖tv_code_eight設置背景為不透明的綠色,即正常的綠色
tv_code_eight.setBackgroundColor(0xff00ff00);
從圖2-3可以看到,代碼使用六位編碼看不到任何背景,使用八位編碼能夠看到正確的綠色背景。圖2-3不同方式設置顏色編碼的效果圖在Android中使用顏色有下列3種方式:1.使用系統已定義的顏色常量。Android系統有12種已經定義好的顏色,具體的類型定義在Color類中,詳細的取值說明見表2-1。表2-1顏色類型的取值說明2.使用十六進制的顏色編碼。在布局文件中設置顏色需要在色值前面加“#”,如android:textColor="#000000"。在代碼中設置顏色可以直接填八位的十六進制數值(如setTextColor(0xff00ff00);),也可以通過Color.rgb(intred,intgreen,intblue)和Color.argb(intalpha,intred,intgreen,intblue)這兩種方法指定顏色。在代碼中一般不要用六位編碼,因為六位編碼在代碼中默認透明,所以代碼用六位編碼跟不用沒什么區別。3.使用colors.xml中定義的顏色。res/values目錄下有個colors.xml文件,是顏色常量的定義文件。如果要在布局文件中使用XML顏色常量,可引用“@color/常量名”;如果要在代碼中使用XML顏色常量,可通過這行代碼獲?。篻etResources().getColor(R.color.常量名)。2.1.3屏幕分辨率在App編碼中時常要取手機的屏幕分辨率(如當前屏幕的寬和高),然后動態調整界面上的布局。在代碼中獲取分辨率就是想辦法獲得DisplayMetrics對象,然后從該對象中獲得寬度、高度、像素密度等信息。下面是DisplayMetrics類的常用屬性說明。widthPixels:以px為單位計量的寬度值。heightPixels:以px為單位計量的高度值。density:像素密度,即一個dp單位包含多少個px單位。下面是獲取當前屏幕的寬度、高度、像素密度的代碼示例。從一個接入設備上獲得屏幕分辨率信息,如圖2-4所示。該設備為5寸屏幕,分辨率是720*1280,像素密度是2。圖2-4某手機上的分辨率信息2.2簡單布局本節開始介紹Android的基本視圖和布局,首先說明基本視圖View類的常用屬性和方法,接著描述如何使用線性布局LinearLayout,最后介紹滾動視圖ScrollView的用法。2.2.1視圖View的基本屬性View是Android的基本視圖,所有控件和布局都是由View類直接或間接派生而來的。故而View類的基本屬性和方法是各控件和布局通用的,掌握好基本屬性和方法,在哪里都能派上用場,能夠舉一反三、事半功倍。下面是視圖在XML布局文件中常用的屬性定義說明。id:指定該視圖的編號。layout_width:指定該視圖的寬度??梢允蔷唧w的dp數值;可以是match_parent,表示與上級視圖一樣寬;也可以是wrap_content,表示與內部內容一樣寬(內部內容若超過上級視圖的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 八年級語文上冊新聞寫作習題省公開課一等獎百校聯賽賽課微課獲獎課件
- 中考地理黃土高原北京復習省公開課一等獎百校聯賽賽課微課獲獎課件
- 招聘流程自動化軟件創新創業項目商業計劃書
- 九年級化學上冊62化石燃料的利用化石燃料全國公開課一等獎百校聯賽微課賽課特等獎課件
- 二氧化碳的實驗室制取
- 地面銷售知識培訓課件
- 工程部見習生培訓課件
- 大數據異構數據集成的動態質量研究-洞察及研究
- 湖北省襄陽五中學實驗中學2024年九年級化學第一學期期末復習檢測試題含解析
- 2025屆濮陽市重點中學數學九上期末質量跟蹤監視試題含解析
- 寶鋼設備大修管理辦法
- 緩和醫療與護理課件
- 學堂在線 軍事理論 章節測試答案
- 早產兒喂養不耐受的護理
- 腫瘤藥藥學科普
- 新生兒外周靜脈建立與管理
- 垃圾發電廠節能管理制度
- (2021年)emi濾波器設計規范
- 云硫礦業招聘試題及答案
- 企業生產設備風險評估報告
- 2025-2030大輸液行業發展分析及投資價值研究咨詢報告
評論
0/150
提交評論