@极简主义患者/社交控/伪技术宅/沉迷幻想不能自拔的文艺少年
不定期更新的文字平台:微博 简书
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{}
- 使用类中的构造函数来创建实例:
TextView priceTextView = new TextView(context);
也可以使用工厂方法模式创建对象:
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.
此节为视频中既有实例的代码片段,可参考之从而思考造轮子的基本步骤,学会举一反三,利用基础知识+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);
}
- 本地化
本地化即使创建的应用能更好的兼容用户体验,通过提供兼容性资源包的方式来完成,比如可以修改string.xml文件来将资源进行字符串引用方式的修改,同时提供多语言版本的string.xml文件,完成language的本地化
这里是本地化检查清单,进行应用发布前可供参考