《Android》『Button』- Button 的基本用法
《Android Developers 參考文獻》
《繼承架構》
extends TextView
java.lang.Object
↳ android.view.View
↳ android.widget.TextView
↳ android.widget.Button
《簡單介紹》
Button 顧名思義是就是按鈕的意思,它是一個很基本的控制元件類別,繼承 TextView 而來,因此 Button 類別中的很多方法均繼承自 TextView,這邊我們主要來說明幾個它常用的按鈕事件方法,條列如下 –
➥setOnClickListener – 設定按下按鈕事件
➥setOnLongClickListener – 設定長按按鈕事件
➥setOnFocusChangeListener – 設定按鈕焦點改變事件
➥setOnTouchListener – 設定按紐觸碰監聽事件
設定按下按鈕事件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
. . public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final Button btn = (Button)findViewById(R.id.btn); btn.setOnClickListener(btn_listener); . . . } Button.OnClickListener btn_listener = new View.OnClickListener() { @Override public void onClick(View v) { //TODO } }; . . . } |
MainActivity.java
1 2 3 4 5 6 |
<Button android:id="@+id/btn" android:text="btn" android:layout_width="wrap_content" android:layout_height="wrap_content" /> |
layout.xml
按下按鈕事件是 Button 中最基本且最常用的方法,可以很簡單的將一個 Button 以及它所對應的點擊事件定義出來,或者更簡單的,我們可以直接在 layout.xml 中透過 android:onClick = “btn_OnClick” 的方式,自訂一個點擊事件的名稱,再於程式碼中加入 public void btn_OnClick(View view) { } 的方法即可。
設定長按按鈕事件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
. . public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final Button btn = (Button)findViewById(R.id.btn); btn.setOnLongClickListener(btn_listener); . . . } Button.OnLongClickListener btn_listener = new View.OnLongClickListener() { @Override public void onClick(View v) { //TODO } }; . . . } |
MainActivity.java
與前一個例子一樣,不同動作的差別其實只在於程式碼中宣告的監聽事件,透過如上方式,我們可以實作長按按鈕事件。
設定按鈕焦點改變事件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
. . public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final Button btn = (Button)findViewById(R.id.btn); btn.setOnFocusChangeListener(btn_listener); . . . } Button.OnFocusChangeListener btn_listener = new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if(hasFocus) { //TODO hasFocus } else { //TODO not in Focus } } }; . . . } |
MainActivity.java
按鈕焦點改變事件與前面稍微不同的是,在 onFocusChange 中回傳了一個 boolean 值,可以用來判斷此 Button 目前是否獲得焦點,若為 true 則表示獲得焦點,false 則表示失去焦點。
設定按紐觸碰監聽事件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
. . public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final Button btn = (Button)findViewById(R.id.btn); btn.setOnTouchListener(btn_listener); . . . } Button.OnTouchListener btn_listener = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch(event.getAction()) { case MotionEvent.ACTION_DOWN: //按下動作監聽 px = (int)event.getX(); py = (int)event.getY(); break; case MotionEvent.ACTION_MOVE: //移動動作監聽 px = (int)event.getX(); py = (int)event.getY(); } return false; } }; . . . } |
MainActivity.java
透過 setOnTouchListener 事件,我們為按鈕綁定了一個觸碰監聽器,用來處理當按鈕被觸碰時的動作,在 onTouch 中,會回傳一個MotionEvent 類別的物件 event,透過此物件,我們可以在當有觸控動作時,分析傳回來的 ACTION,以做出相應的動作。
延伸閱讀:
臉書留言
一般留言