@極簡主義患者/社交控/偽技術宅/沉迷幻想不能自拔的文藝少年
不定期更新的文字平臺:微博 簡書
1.方法
-
定義方法(method signature)
private int calculatePrice(int quantity){}
- 訪問修飾符(access modifier):決定訪問權限的修飾符,有private/public/protected三個值
- 返回值類型(return data type):當方法有返回值時決定方法返回值的類型,使用void表示沒有返回值
- 方法名(method name):需要注意命名方法,動詞小寫字母開頭且為駝峰式
- 輸入列表(inputs of list):即形式參數,可有多個或0個,用逗號隔開;形參必須說明數據類型,而相應的實參則要符合這個數據類型,不然就會編譯錯誤;多個形參一定要按順序進行傳參
調用方法(call method)
調用方法的時候主要注意的就是實參和形參的傳參問題,參數的數量/類型/順序一定要保持一致,否則就會出錯;另外在調用函數的時候可以使用算式作為參數變量直接使用,而不需繁瑣的定義之后再進行傳參,可以使代碼更為簡潔,但會增加理解難度個人理解
方法的調用其實就是為了使代碼的復用率和理解難度達到一個平衡點,一方面我們需要利用方法來使代碼更加簡潔/更加容易進行修改/更容易達到復用的目的;另一方面方法的定義和調用又增加了對代碼理解的難度,特別是形參和實參的命名和數量,都容易造成一定的混淆,所以為了使兩者達到一個平衡,我們就需要更豐富的經驗和實踐來實現對方法的定義
2.資源
資源文件都在項目的res文件夾下,Java文件都在java文件夾下,資源包括圖像/文本字符串/顏色/寬度和高度的維度/XML文件/音頻視頻文件等
應用編譯時,AAPT工具會產生一個R類(R.java),在這個類中每一個資源都自己的ID,且此ID在R類中有自己相應的資源類型格式
- 獲取資源的兩種方式:
- In code:
R.string.hello
- In XML:
@string/hello
- In code:
- 常見的資源類型:
Resource Type | In Java Code | In XML |
---|---|---|
Image | R.drawable.photo | @drawable/photo |
String | R.string.hello | @string/hello |
Layout XML file | R.layout.activity_main | @layout/activity_main |
ID | R.id.price_text_view | @id/price_text_view |
Color | R.color.red | @color/red |
3.類和對象
- 擁有相應value的多個變量和多種用來操作的方法組合在一起可以成為一個對象(Object)
- 對象由定義它的類(Class)生成,因此對象也稱為某個類的實例,在類里面定義了State(聲明)和methods(方法)
- 與定義方法一樣,定義一個類如下所示:
public class TextView extends View{}
- 使用類中的構造函數來創(chuàng)建實例:
TextView priceTextView = new TextView(context);
也可以使用工廠方法模式創(chuàng)建對象:
MediaPlayer player = NeidaPlayer.create(context,R.raw.song);
- 對對象調用方法:
//Object Variable Name.Method Name(Input Arguments)
titleTextView.setText("News");
/*if use this method in the class
Method Name(Input Arguments)
or
this.Method Name(Input Arguments)
*/
setText("News");
this.setText("News");
- 類與類之間存在繼承關系(extends),當一個類繼承另一個類時,可獲得繼承類的所有方法和屬性,同時在需要更新時也可以重寫繼承類的方法
- 使用某個方法返回相應數據時應定義一個變量來存儲,而在存儲時一定要使數據類型相匹配,不匹配時可使用強制類型轉換,如:
TextView orderSummaryTextView = (TextView) findViewById(R.id.order_summary_text_view);
- Java中分別使用Getter和Setter方法來“獲取”和“修改”視圖的某個值(例如視圖存儲的文本或圖片)
*4.完善賣咖啡app界面etc.
此節(jié)為視頻中既有實例的代碼片段,可參考之從而思考造輪子的基本步驟,學會舉一反三,利用基礎知識+Search Engines完成
- 添加復選框(CheckBox)并對其值進行使用(boolean)
<CheckBox
android:id="@+id/whipped_cream_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="24dp"
android:text="Whipped cream"
android:textSize="16sp"/>
CheckBox whippedCreamCheckBox = (CheckBox)findViewById(R.id.whipped_cream_checkbox);
boolean hasWhippedCream = whippedCreamCheckBox.isChecked();
- 添加文本輸入框(EditText)并對其值進行使用(String)
<EditText
android:id="@+id/name_field"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:hint="Name"
android:inputType="textCapWords"/>
EditText text = (EditText)findViewById(R.id.name_field);
String name = text.getText().toString();
- 利用條件代碼(if/else)進行價格調整和數量限定
private int calculatePrice(boolean addWhippedCream, boolean addChocolate){
int basePrice = 5;
if(addWhippedCream){
basePrice += 1;
}
if(addChocolate){
basePrice += 2;
}
return quantity * basePrice;
}
public void increment(View view) {
if(quantity == 100){
Toast.makeText(this, "You cannot have more than 100 coffees", Toast.LENGTH_SHORT).show();
}
quantity = quantity + 1;
displayQuantity(quantity);
}
public void decrement(View view) {
if(quantity == 1){
Toast.makeText(this, "You cannot have less than 1 coffee", Toast.LENGTH_SHORT).show();
}
quantity = quantity - 1;
displayQuantity(quantity);
}
- intent的使用和理解
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:"));
intent.putExtra(Intent.EXTRA_SUBJECT, "Just Java order for " + name);
intent.putExtra(Intent.EXTRA_TEXT, priceMessage);
if(intent.resolveActivity(getPackageManager()) != null){
startActivity(intent);
}
- 本地化
本地化即使創(chuàng)建的應用能更好的兼容用戶體驗,通過提供兼容性資源包的方式來完成,比如可以修改string.xml文件來將資源進行字符串引用方式的修改,同時提供多語言版本的string.xml文件,完成language的本地化
這里是本地化檢查清單,進行應用發(fā)布前可供參考