第五章 用戶界面基礎(chǔ)(界面事件)

參考資料:
《Android應(yīng)用程序開發(fā)》ISBN 9787302283164
參考軟件:
Android Studio、Eclipse+ADT、Android SDK、JDK
界面事件
(一)?事件使我們在于UI交互式發(fā)生的,我們點擊一個按鍵時,可能就已經(jīng)除非好幾個事件,例如我們點擊數(shù)字鍵“0”,他會涉及到按下事件,和一個彈起(松開)事件,在我們android中還可能涉及到觸摸屏事件,所以在android系統(tǒng)中,事件是作為常用的功能之一;
在android下,事件的發(fā)生是在監(jiān)聽器下進(jìn)行,android系統(tǒng)可以響應(yīng)按鍵事件和觸摸屏事件,事件說明如下:
onClick(View v)?一個普通的點擊按鈕事件
boolean onKeyMultiple(int keyCode,intrepeatCount,KeyEvent event)用于在多個事件連續(xù)時發(fā)生,用于按鍵重復(fù),必須重載@Override實現(xiàn)
boolean onKeyDown(int keyCode,KeyEventevent)?用于在按鍵進(jìn)行按下時發(fā)生
?boolean onKeyUp(int keyCode,KeyEvent event)?用于在按鍵進(jìn)行釋放時發(fā)生
onTouchEvent(MotionEvent event)觸摸屏事件,當(dāng)在觸摸屏上有動作時發(fā)生
boolean onKeyLongPress(int keyCode,KeyEvent event)當(dāng)你長時間按時發(fā)生(疑問?)
(二)?首先我們建立一個android項目,當(dāng)項目建立好之后,直接在默認(rèn)的main.xml文件中拖放一個button?按鈕,其他的不需要在這里做什么了,然后就可以到命名好的.java文件中進(jìn)行先關(guān)代碼的書寫;
1.?????對要使用的控件進(jìn)行引用,當(dāng)然你也可以用到的時候再在相關(guān)類控件添加引用
import?android.app.Activity;
import?android.os.Bundle;
import?android.view.KeyEvent;
import?android.view.MotionEvent;
import?android.view.View;
import?android.widget.Button;
import?android.widget.Toast;
2.?????獲得相關(guān)對象,設(shè)置控件監(jiān)聽器
Button?button=(Button) findViewById(R.id.button1);
????????//設(shè)置監(jiān)聽
??????? ?button.setOnClickListener(new?Button.OnClickListener()
??????? ?{
???????????@Override
???????????public?void?onClick(View v) {
??????????????//?TODO?Auto-generated method stub
????????????? ?DisplayToast("事件觸發(fā)成功");
?????????? ?} ? ? ? ? ??
??????? ?});
請注意這里末尾使用的是分號“;這里就是獲得button的實例,然后對他進(jìn)行監(jiān)聽,當(dāng)用戶點擊時就會發(fā)生onClick事件,這里還用到一個方法,就是顯示一個短消息,在屏幕停留幾秒鐘就會自動消失,其方法如下:
public?void?DisplayToast(String str)
??? {
??? Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
??? }
當(dāng)然你也可以設(shè)置顯示長點,即Toast.LENGTH_SHORT改為Toast.LENGTH_LONG
3.?????當(dāng)按鍵按下是發(fā)生的事件
public boolean ?onKeyDown(int?keyCode,KeyEvent event)
??? ?{
??? ?switch(keyCode)
??? ?{
??? ?case KeyEvent.KEYCODE_0:
??? ???? DisplayToast("你按下數(shù)字鍵0");
??? ???? break;
??? ?case KeyEvent.KEYCODE_DPAD_CENTER:
??? ???? DisplayToast("你按下中間鍵");
??? ???? break;sss
??? ?case KeyEvent.KEYCODE_DPAD_DOWN:
??? ???? DisplayToast("你按下下方向鍵");
??? ???? break;
??? ?case KeyEvent.KEYCODE_DPAD_LEFT:
??? ???? DisplayToast("你按下左方向鍵");
??? ???? break;
??? ?case KeyEvent.KEYCODE_DPAD_RIGHT:
??? ???? DisplayToast("你按下右方向鍵");
??? ???? break;
??? ?case KeyEvent.KEYCODE_DPAD_UP:
??? ???? DisplayToast("你按下上方向鍵");
?????????? ?break;
??? ?case KeyEvent.KEYCODE_ALT_LEFT:
??? ???? DisplayToast("你按下組合鍵alt+←");
??? ???? break;
??? ?}
??? ?return super.onKeyDown(keyCode, event);
??? ?}
這里所有的keyCode都囊括了,這只是幾個比較典型的例子,效果如下:






4.?????????當(dāng)按鍵彈起時發(fā)生的事件,代碼如下:
public?boolean?onKeyUp(int?keyCode,KeyEvent ?event)
??? ?{
????switch(keyCode)
??? ?{
????case?KeyEvent.KEYCODE_0:
??? ???? DisplayToast("松開數(shù)字鍵0");
??? ?????break;
????case?KeyEvent.KEYCODE_DPAD_CENTER:
??? ???? DisplayToast("松開中間鍵");
??? ?????break;
????case?KeyEvent.KEYCODE_DPAD_DOWN:
??? ???? DisplayToast("松開下方向鍵");
??? ?????break;
????case?KeyEvent.KEYCODE_DPAD_LEFT:
??? ???? DisplayToast("松開左方向鍵");
??? ?????break;
????case?KeyEvent.KEYCODE_DPAD_RIGHT:
??? ???? DisplayToast("松開右方向鍵");
??? ?????break;
????case?KeyEvent.KEYCODE_DPAD_UP:
??? ???? DisplayToast("松開上方向鍵");
???????????break;
????case?KeyEvent.KEYCODE_ALT_LEFT:
??? ???? DisplayToast("松開組合鍵alt+←");
??? ?????break;
??? ?}
????return?super.onKeyUp(keyCode, event);
??? ?}
效果與上圖類似,只是文字不一樣

5.?????????觸摸屏事件,當(dāng)用手或者用筆在觸摸屏上做動作是發(fā)生,相關(guān)代碼如下:
public?boolean?onTouchEvent(MotionEvent ?event)
??? ?{
????int?iAction=event.getAction();
????if(iAction==MotionEvent.ACTION_MOVE)
??? ?{
? ? ? ? DisplayToast("你在觸摸屏上進(jìn)行了滑動");
??? ?}
????else
??? ?{
??? ?????return?false;
??? ?}
????return?super.onTouchEvent(event);
??? ?}

6.?????????連續(xù)點擊按鍵時發(fā)生的事件
Publicboolean ?onKeyMultiple(int keyCode,int repeatCount,KeyEvent event)
{
?Return ?super.onKeyMultiple(keyCode, repeatCount, event);
}