與哥布林say hello後,就算趟上世界的旅途啦
今天是修練課程,在面對新的戰鬥之前,有些基本技能是得要習得的
而將學習的技能名稱為「巴特」與「吐司」~恢復用(誤)
今天要學習新的技能~巴特(button)
請再依昨天所說明的方法再開一個新的戰場吧!
接著將畫面上的hello world刪除後,再從左邊的"Form Widgets"拉出這次的技能-巴特
拉出來後,我們要改這個button的屬性,不過在改屬性,我們先做個動作,還記得昨天要大家去修改文字的地方嗎,我們今天要增加一個新的字串,所以請打開"string.xml"
接著請依箭頭順序做接下來說明的步驟
再來回到介面 - activity_main.xml的畫面,點擊剛剛新增的button,右邊會多出一個字視窗-Properties,
這時我們要改兩個屬性,一個是"Id"改為"@+id/btnAttack",另外一個是"Text",
點下右邊"..."的按鈕,然後選擇我們剛剛新增的"attack"字串,在存檔後,我們可以看到畫面會變成下面這樣
以上動作,讓我們將"巴特"這個技能的"型"給做出來了,就下來就是讓他有實質的動作啦!
請打開如下圖的"MainActivity.java"
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//招式建構區
}
首先,是先定義讓程式碼可以認得這個招式是什麼東西
Button btnAttack = (Button)findViewById(R.id.btnAttack);
等號左邊是我們定義的變數類型
等號右邊是我們要取得的招式位子,再用(Button)的方式做為轉型之用。
讓程式認得後,就是對他定義動作了
定義動作的方法叫做setOnClickListener(OnClickListener l),也就文義上來說,就是去偵測這個物件被點擊"OnClick"的動作
所以這邊段的程式碼結構是這樣
btnAttack.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//被點擊後要執行的動作
}
});
而我們要做的動作很簡單,就是計算攻擊次數,也就是點擊"攻擊"按鈕的次數,所以我們要定義一個全域的數值變數mCounter,來記錄次數之。同時要用讓我們知道現在被點擊了幾次,而秀出訊息的這個動作,用的招式名稱叫做「吐司(Toast)」。
而 Toast 的語法結構如下:
//第一個參數:context,也就是要在這個view的內容中執行
//第二個參數:我們要呈現的訊息
//第三個參數:呈現的長度,有二:Toast.LENGTH_SHORT/Toast.LENGTH_LONG,短/長
Toast.makeText(Context context, CharSequence text, int duration)
因此,在最後整個完成的內容是這樣的
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/* TODO: 招式建構區 */
//點擊的次數
mCount = 0;
Button btnAttack = (Button)findViewById(R.id.btnAttack);
btnAttack.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
/* TODO: 被點擊後要執行的動作 */
//點擊一次就+1
mCount++;
//要呈現的訊息字串
String msg = "您連續攻擊了" + mCount + "次";
Toast.makeText(v.getContext(), msg, Toast.LENGTH_SHORT).show();
}
});
}
在沒有特殊意外的狀況下,這樣就在我們的侍者身上看到上面這個畫面嘍
完整的程式碼可以從GitHub取得哦
Toast是何物
mosil提到:
秀出訊息的這個動作,用的招式名稱叫做「吐司(Toast)」。
就是您看到的「您連續攻擊了xx次」的那個訊息框就是
了解了,謝謝
想請教一下
app_name與title_activity_main之間的關係
(有試著修改app_name的value,但沒有看到任何改變;
而修改title_activity_main,標題的文字就改變了)
謝謝
app_name 欄位其實是一個 app 裡共用的 application 檔案名稱
而當一個 activity 的<intent-filter>屬性的<action>被 "android.intent.action.MAIN" 同時<category>屬性有被設定成系統預設屬性時,其名稱就會跟著一起被呈現在 app 列表裡面
反過來說,若是您在 app 列表裡看到多個相同 icon 而名稱都是在該 app 程式碼裡的 activity 時,就要回頭看是否為這兩個屬性沒處理好