筆記以開發名為CoffeeOrder的app活動為線索,介紹app如何從功能設計→布局設置→代碼編寫→改進,介紹java文件修改和布局嵌套。
一、應用知識
首先來看一些AndroidStudio的基本知識,幫助大家有個基本概念。
在L1和2A課程,我們學習關於XML的代碼修改,基本都在修改MainActivity.xml。我們可以直接在視圖中查看XML代碼的實際視圖。
WINDOWS打開Emulator——安裝Virtual Device,下載Nexus4 Android平台庫。若系統提醒BIOS未支持VT-X,需要手動在BIOS-configuration-Virtual Technology打開。
2A課程提到MainActivity.java由Java代碼實現,文件定義MainActivity布局的目的、功能,並包含各種方法的實際代碼。
一些概念:
Android DDMS:實際Android手機調試時,可以監控設備的活動。
logcat:輸出日志,記錄並收集設備調試過程中的所有行為。
Pseudocode:
偽代碼——解釋應用每一步驟內容的高級描述語言。偽代碼和描述不同,以文字形式、以代碼的思維分解每個行為的具體內容,並可以直接將每一句改寫為代碼。
局部變量&全局變量:在程序文件中,往往會包含多個函數。在每個函數體內定義的變量僅在該函數運行時有效賦值,結束后即釋放;全局變量在子函數體外定義,並在程序運行時持續有效。
二、應用設計思路
設計整個應用,主要需要以下工作:
界面顯示: 顯示Quantity、Price、Order按鈕,添加TextView和Button。
數據計算: 根據實際QUANTITY×單價計算實際金額——引入變量設置
Button鏈接: 按鈕的設置和TextView相同,主要涉及點擊Button后的設置。
數目增減: 當按下加減按鈕時,能夠實時增減QUANTITY
顯示更新: 在設置View時我們通常設定初值,當需要改變顯示值時,需要額外定義活動。
界面顯示——

數據計算——
當需要修改數目時,可直接打開Java文件進行修改;
每次打開太過麻煩,且Java不向用戶開放,為直接通過UI動作進行更新,設置Quantity變量,這樣UI的每個操作都可直接修改QUANTITY,自動經過函數進行顯示。
定義模式:
(Datatype)(Variable name)=(Initial value)
int num = 0;
Button鏈接——
設置Button點擊活動主要涉及屬性android:onClick=”submitOrder”
表示當每次點擊Button按鈕時,都會在Java文件中尋找submitOrder方法進行運行。
public void submitOrder(View view) { displaystatus(1); }
數目增減——
同理【+】【-】按鈕可定義方法“increment”“decrement”
方法體代碼:quantitty=quantity+1; displayquantity(quantity);
public void increment(View view) { num++; display(num); displayPrice(num * 5); displaystatus(0); }
顯示更新——
對Quantity_text_view進行修改,需要定義displayquantity()displayprice()
private void display(int number) { TextView quantityTextView = (TextView) findViewById(R.id.quantity_text_view); quantityTextView.setText("" + number); } private void displayPrice(int number) { TextView priceTextView = (TextView) findViewById(R.id.price_text_view); priceTextView.setText(NumberFormat.getCurrencyInstance().format(number)); }
狀態更新——
在課程視頻中,每次點擊ORDER,程序會對實時數目進行計算。
但實際生活中,點擊ORDER往往直接提交訂單,故需要數目修改實時更新金額,再點擊ORDER后,我們期望返回狀態“Successfullyordered”
同displayprice方法,我們定義displayStatus(charstatus),只是這里不在是int數字,而是String字符串(一串文字)
private void displaystatus(int number) { TextView statusTextView = (TextView) findViewById(R.id.status_text_view); if (num==0) statusTextView.setText("Please enter quantity !"); else if (number==0) statusTextView.setText("Ordering..."); else statusTextView.setText("Successfully ordered !"); }
更多改進:
改進1——嵌套結構
布局優化,當我們需要移動Button按鈕至Quantity_text_view同行后,破壞原有LinearLayout的垂直結構。
(1)全局從LinearLayout修改為RelativeLayout
RelativeLayout由於過靈活地布局設置,由於加減按鈕以外的View依舊以垂直結構為主,我們可以采用第二種方法。
(2)LinearLayout嵌套子LinearLayout
從結構來看,嵌套結構所做的改變如下圖所示:

可以在Studio在Design面板Component樹看到不同View的嵌套層級結構
改進2——字符串設置
字符串String和整數Int同屬於變量,定義方式同:
String(類型) Stringname(自定義名字)= ” dfadfljaldskfj”(初始值)
訂購過程中,可同時更新訂單的狀態”Successfullyordered” ”Orderfailed”
實際操作:
對displaystatus輸入參數進行修改int num→ String status
displaystatus("Please select beverage !");
同時字符串還有“連接”獨特性,可以通過加號“+”進行連接,String+int=String
改進3——條件判斷
在加減數目時,沒有對0進行識別,即會產生數目-1.金額-5情況
故而在decrement方法中,我們可以增加以下代碼
if (num == 0) num = 0; else num--;
表示數目為0時,保持不變;不為0(正整數),數目減1
改進4——Gravity
layout_gravity由所屬ViewGroup控制
gravity由View控制
涉及屬性包括:
該控件的布局方式。可以取以下值:
top -- 控件置於容器頂部,不改變控件的大小。
bottom -- 控件置於容器底部,不改變控件的大小。
left -- 控件置於容器左邊,不改變控件的大小。
right -- 控件置於容器右邊,不改變控件的大小。
center_vertical -- 控件置於容器豎直方向中間,不改變控件的大小。
fill_vertical -- 如果需要,則往豎直方向延伸該控件。
center_horizontal -- 控件置於容器水平方向中間,不改變控件的大小。
fill_horizontal -- 如果需要,則往水平方向延伸該控件。
center -- 控件置於容器中間,不改變控件的大小。
fill -- 如果需要,則往水平、豎直方向延伸該控件。
start -- 控件置於容器的起始處,不改變控件的大小。
end -- 控件置於容器的結束處,不改變控件的大小。
改進5——增加多種飲品種類
改進5是結合改進1~4的應用,包含布局嵌套、新變量設置、字符串顯示等
① 布局嵌套
在第一級ViewGroup嵌套子LinearLayout,添加三種飲品Button
——“MOCHA”“CAPPUCCINO”“GREENTEA”
② 設置新變量price
此時不僅飲品數目num,飲品價格也隨種類變化,增加變量price,同為全局變量
在不同按鍵onClick鏈接方法中,分別對price進行賦值,displayPrice顯示(確保動態金額顯示)
public void greenteaPrice(View view) { price=3; kind="Green tea"; displayPrice(price*num); }
③ 豐富訂單狀態信息
每次提交ORDER時,向用戶反饋飲品種類+飲品數量
飲品種類設置全局變量kind,String類型,同price一起賦值、
飲品數量num表示,最后displaystatus(“Ordered ”+ kind+ ” cup ”+num);
public void greenteaPrice(View view) { price=3; kind="Green tea"; displayPrice(price*num); }
所有改進之后得到的CoffeeOrder的效果為

申明:
1、本筆記為文字及圖片均為個人原創,轉載請注明博客園-igoslly
2、Android開發課程於2017年4年參與GoogleDeveloper進行學習,筆記原版http://www.studyjamscn.com/thread-19854-1-1.html