關於Android的幾種事件處理

安卓架構開發發表於2019-05-12

Android事件處理通常和控制元件相結合,通常有以下幾種事件處理模型: •(一)事件監聽的處理模型

public voidonCreate(Bundle savedInstanceState)
{
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
         Button bn =(Button)findViewById(R.id.bn);
         bn.setOnClickListener( newMyClickListener() );
}
class MyClickListenerimplements View.OnClickListener
{
         @override
         public void onClick(View arg0)
         {
                   EditText txt =(EditText)findViewById(R.id.txt);
                   Txt.setText(“bn 被單擊了!”);
         }
}

複製程式碼

• (二)基於監聽的事件處理模型步驟如下: 1.獲取元件(事件源),也就是被監聽的物件 2.實現事件監聽器類,該類是一個特殊的Java類,必須實現一個XxxListener介面 3.呼叫事件源的setXxxListener方法將事件監聽器物件註冊給事件源

  • 基於回撥的事件處理 為了實現回撥機制的事件處理,Android為所有GUI元件提供了一些事件處理方法,以View為例,該類包含如下方法

1.boolean onKeyDown(int keyCode, KeyEvent event) 2.boolean onKeyLongPress(int keyCode, KeyEvent event) 3.boolean onKeyShortCut(int keyCode, KeyEvent event) 4.boolean onKeyUp(int keyCode, KeyEvent event) 5.boolean onTouchEvent(MotionEvent event) 6.boolean onTrackballEvent(MotionEvent event) 所有基於回撥的處理方法都有一個boolean型別的返回值,該返回值用於標識該處理方法是否能完全處理該事件

1.如果返回true,表明該處理方法已完全處理該事件,該事件不會傳播出去 2.如果返回false,表明該處理方法並未完全處理該事件,該事件會傳播出去 •(三)響應的系統設定的事件 程式可呼叫Activity的如下方法獲取系統的Configuration物件:

    Configuration cfg = getResources().getConfiguration();

複製程式碼

一旦獲得了系統的Configuration物件,便可獲得如下系統的配置資訊

這裡是引用 1.public float fontScale 設定字型的縮放因子 2.public int keyboard 設定所關聯的鍵盤型別:KEYBOARD_NOKEYS、KEYBOARD_QWERTY(普通電腦鍵盤)、KEYBOARD_12KEY(只有12個鍵的小鍵盤) 3.public int keyboardHidden 只有硬體鍵盤和軟鍵盤都不可用時才返回KEYBOARDHIDDEN_YES,否則返回KEYBOARDHIDDEN_NO 4.public Locale locale 獲取當前的Locale 5.public int mcc 獲取移動訊號的國家碼 6.public int mnc 獲取移動訊號的網路碼 7.public int navigation 判斷導航裝置的型別:NAVIGATION_NONAV(無導航),NAVIGATION_DPAD(DPAD導航),NAVIGATION_TRACKBALL(軌跡球導航),NAVIGATION_WHEEL(滾輪導航) 8.public int orientation 獲取系統螢幕的方向:ORIENTATION_LANDSCAPE(橫向螢幕),ORIENTATION_PORTRAIT(豎向螢幕),ORIENTATION_SQUARE(方形螢幕) 9.public int touchscreen 系統觸控式螢幕的觸控方式:TOUCHSCREEN_NOTOUCH、TOUCHSCREEN_STYLUS(觸控筆式觸控式螢幕)、TOUCHSCREEN_FINGER

•(四)Handler訊息傳遞機制 Handler類包含如下方法用於傳送、處理訊息

1.void handleMessage(Message msg) 2.final boolean hasMessages(int what) 3.final boolean hasMessages(int what, Object object) 4.Message obtainMessage() 5.sendEmptyMessage(int what) 6.final boolean sendEmptyMessageDelayed(int what, long delayMillis) 7.final boolean sendMessage (Message msg) 8.final boolean sendMessageDelayed(Message msg, long delayMillis)

使用例項:

final Handler myHandler = new Handler()
        {
            @Override
            public void handleMessage(Message msg)
            {
                if (msg.what == 0x1222)
                {
                    doSomething();
                }
            }
        };
        //定義一個計時器,讓該計時器週期性地執行指定任務
        new Timer().schedule(new TimerTask()
        {
            @Override
            public void run()
            {
                //新啟動的執行緒無法訪問該Activity裡的元件
                //所以需要通過Handler傳送資訊
                Message msg = new Message();
                msg.what = 0x1222;
                //傳送訊息
                myHandler.sendMessage(msg);
            }
        }, 0 , 2*1000);

複製程式碼

•(五)使用手勢 (先在AVD中用GestureBuilder建立手勢,然後匯出至/res/raw中)

library = GestureLibraries.fromRawResource(this, R.raw.gestures);
        if( !library.load() ){
            finish();
        }
        GestureOverlayView gesture = (GestureOverlayView)findViewById(R.id.gesture);
        gesture.addOnGesturePerformedListener(this);

    @Override
    public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
        // TODO Auto-generated method stub
        ArrayList<Prediction> gestures = library.recognize(gesture);    //獲取全部預測結果
        int index = 0;
        double score = 0.0;
        for(int i = 0; i < gestures.size(); ++i){
            Prediction result = gestures.get(i);
            if(result.score > score){
                index = i;
                score = result.score;
            }
        }
        Toast.makeText(this, gestures.get(index).name, Toast.LENGTH_LONG).show();
    }

複製程式碼

點選+關注哦
關於Android的幾種事件處理

相關文章