這節(jié)課是 Android 開(kāi)發(fā)(入門)課程 的第一部分《布局和交互》的第四節(jié)課舍悯,導(dǎo)師依然是 Katherine Kuan 和 Kunal Chawla,主要內(nèi)容是嵌套 ViewGroups 和字符串變量供常。
關(guān)鍵詞:嵌套 ViewGroups橡庞,字符串變量 String,轉(zhuǎn)義字符
嵌套 ViewGroups (Nested ViewGroups)
課程 2B 通過(guò)嵌套 ViewGroups 來(lái)升級(jí) Just Java App 的布局,這有兩個(gè)好處:
- 更快捷第從頭到尾瀏覽界面登刺,提升用戶體驗(yàn);
- 使內(nèi)容充滿屏幕嗡呼,而不是一長(zhǎng)條纸俭。
RelativeLayout 或 LinearLayout 的嵌套使用能夠使布局豐富多樣,但要注意嵌套 ViewGroups 對(duì)設(shè)備性能的消耗南窗。另外掉蔬,FrameLayout 和 GridLayout 這兩種 ViewGroups 也能夠嵌套。
使用嵌套 ViewGroups 的步驟:分解 Views→畫 Views 層級(jí)圖→寫 XML 草稿→代碼實(shí)現(xiàn)矾瘾。
- 分解Views。下圖為課程 2B 應(yīng)用要實(shí)現(xiàn)的布局箭启。
布局中一共有四個(gè) TextView 和三個(gè) Button壕翩。這些 Views 總體垂直排列,通過(guò) vertical 的 LinearLayout 能實(shí)現(xiàn)傅寡;除了第二行有三個(gè)水平擺放的 Views放妈,通過(guò) horizontal 的 LinearLayout 能實(shí)現(xiàn)。
- 畫 Views 層級(jí)圖荐操。通常為樹(shù)狀圖芜抒,表示 Views 間的父子或兄弟關(guān)系,如下圖所示托启。
- 寫 XML 草稿宅倒。根據(jù)樹(shù)狀圖寫 XML 代碼的草稿,可以清晰條理屯耸,減輕真正用代碼實(shí)現(xiàn)時(shí)的負(fù)擔(dān)拐迁。以下是一段 XML 草稿。
<LinearLayout…>
<TextView.../>
<LinearLayout…>
<Button.../>
<TextView.../>
<Button.../>
</LinearLayout>
<TextView.../>
<TextView.../>
<Button.../>
</LinearLayout>
注意自閉標(biāo)簽和單獨(dú)標(biāo)簽的使用疗绣,他們用來(lái)區(qū)分 Views 間的嵌套關(guān)系线召。
- 代碼實(shí)現(xiàn)。以下是在 Android Studio 中實(shí)現(xiàn)布局的代碼多矮。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
tools:context="com.example.android.justjava.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:text="quantity"
android:textAllCaps="true" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="48dp"
android:layout_height="48dp"
android:onClick="decrement"
android:text="-" />
<TextView
android:id="@+id/quantity_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:text="0"
android:textColor="#000000"
android:textSize="16sp" />
<Button
android:layout_width="48dp"
android:layout_height="48dp"
android:onClick="increment"
android:text="+" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:layout_marginTop="16dp"
android:text="price"
android:textAllCaps="true" />
<TextView
android:id="@+id/price_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="$0"
android:textColor="#000000"
android:textSize="16sp" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:onClick="submitOrder"
android:text="order" />
</LinearLayout>
注意屬性的設(shè)置缓淹,比如嵌套的 LinearLayout 高度應(yīng)該為 "wrap_content"
,而不是 "match_parent"
塔逃。
字符串變量 (String Variables)
字符串變量是變量的一種數(shù)據(jù)類型讯壶,包括字母、符號(hào)患雏、數(shù)字鹏溯;同樣是先聲明后引用。
-
字符串變量的聲明格式為
數(shù)據(jù)類型 變量名 = "初始值";
(1)數(shù)據(jù)類型:String淹仑,注意首字母大寫丙挽。
(2)變量名:命名規(guī)則可 Google 搜索 "variable names java" 找到 Oracle 的說(shuō)明文檔肺孵。通常變量名不能太長(zhǎng)也不能短到一兩個(gè)字母;若是一個(gè)單詞則全小寫颜阐;若是多個(gè)單詞則用小駝峰命名法平窘。
(3)=: 賦值符號(hào),而不是等號(hào)凳怨。這里需要養(yǎng)成右手邊閱讀習(xí)慣瑰艘,即把右邊的值賦予左邊的變量。另外肤舞,賦值符號(hào)兩邊各有一個(gè)空格紫新,這種編程風(fēng)格可提高代碼的可讀性。
(4)初始值:賦予變量的值李剖,通常是字面值 (Literal)芒率,也可以為空;值在一對(duì)雙引號(hào) "..."
內(nèi)篙顺,若要在其中添加雙引號(hào) "
偶芍,需要在前面使用轉(zhuǎn)義字符 \
,即 \"
德玫;若要換行則為 \n
匪蟀。轉(zhuǎn)義序列可 Google 搜索 "java escape characters" 找到 Oracle 的說(shuō)明文檔。
(5)分號(hào)結(jié)尾宰僧。
- 字符串變量的賦值同樣無(wú)需再指定數(shù)據(jù)類型材彪,也具有右手邊閱讀習(xí)慣;類似 int(整型變量)的運(yùn)算琴儿,字符串變量能用
+
號(hào)連接字符串 (String Concatenation)查刻,有許多組合方式:
(1)"字符" + "字符"
(2)"字符" + 數(shù)字
(3)"字符" + 整形變量
連接數(shù)字和其他變量時(shí)無(wú)需用雙引號(hào)包括。組合其他變量時(shí)凤类,僅改變字符串變量的一部分即可實(shí)現(xiàn)內(nèi)容的更新穗泵。組合變量時(shí)注意添加空格。
Just Java App
In MainActivity.java
package com.example.android.justjava;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import java.text.NumberFormat;
/**
* This app displays an order form to order coffee.
*/
public class MainActivity extends AppCompatActivity {
int quantity = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/**
* This method is called when the order button is clicked.
*/
public void submitOrder(View view) {
int price = quantity * 5;
String priceMessage = "Total: $" + price;
priceMessage = priceMessage + "\nThank you!";
displayMessage(priceMessage);
}
/**
* This method is called when the + button is clicked.
*/
public void increment(View view) {
quantity = quantity + 1;
display(quantity);
}
/**
* This method is called when the - button is clicked.
*/
public void decrement(View view) {
quantity = quantity - 1;
display(quantity);
}
/**
* This method displays the given quantity value on the screen.
*/
private void display(int number) {
TextView quantityTextView = (TextView) findViewById(
R.id.quantity_text_view);
quantityTextView.setText("" + number);
}
/**
* This method displays the given quantity value on the screen.
*/
private void displayPrice(int number) {
TextView priceTextView = (TextView) findViewById(R.id.price_text_view);
priceTextView.setText(NumberFormat.getCurrencyInstance().format(number));
}
/**
* This method displays the given text on the screen.
*/
private void displayMessage(String message) {
TextView priceTextView = (TextView) findViewById(R.id.price_text_view);
priceTextView.setText(message);
}
}
添加了一個(gè) displayMessage method谜疤,使點(diǎn)擊 ORDER 按鈕顯示的內(nèi)容更多了佃延。另外修改了 XML 代碼,使控制數(shù)量的按鈕布局改變了夷磕。效果如下圖履肃。
注意粘貼代碼時(shí)的位置,尤其注意大括號(hào)的位置坐桩。
代碼完成后尺棋,使用 Android Studio 的 Reformat Code 和 Rearrange Code 功能來(lái)潤(rùn)色代碼。