التعامل مع إجراءات لوحة المفاتيح

عندما يركز المستخدم على عرض نص قابل للتعديل، مثل EditText وكان المستخدم لديه لوحة مفاتيح متصلة، يتعامل النظام مع المدخلات. ومع ذلك، إذا أردت اعتراض أو معالجة إدخال لوحة المفاتيح بنفسك، يمكنك إجراء ذلك من خلال تنفيذ طرق معاودة الاتصال من KeyEvent.Callback مثل onKeyDown() وonKeyMultiple().

كل من Activity وView فئة تنفذ KeyEvent.Callback، وبالتالي طرق معاودة الاتصال بشكل عام في إضافة هذه الفئات، مناسبًا.

ملاحظة: عند التعامل مع أحداث لوحة المفاتيح باستخدام الفئة KeyEvent وواجهات برمجة التطبيقات ذات الصلة أن لا تتوقّع أن تكون أحداث لوحة المفاتيح إلّا من لوحة مفاتيح خارجية. عدم الاعتماد مطلقًا على استلام المفتاح الأحداث لأي مفتاح على أسلوب الإدخال البسيط (لوحة مفاتيح على الشاشة).

التعامل مع الأحداث الرئيسية الفردية

للتعامل مع ضغطة مفتاح فردية، يجب تنفيذ onKeyDown() أو onKeyUp()، حسبما تقتضي الحاجة. عادةً، تستخدم onKeyUp() إذا أردت التأكّد من تلقّي حدث واحد فقط إذا ضغط المستخدم مع الاستمرار على مفتاح، ثم يتم استدعاء onKeyDown() عدة مرات.

على سبيل المثال، تستجيب طريقة التنفيذ هذه لبعض مفاتيح لوحة المفاتيح للتحكم في اللعبة:

Kotlin

override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean {
    return when (keyCode) {
        KeyEvent.KEYCODE_D -> {
            moveShip(MOVE_LEFT)
            true
        }
        KeyEvent.KEYCODE_F -> {
            moveShip(MOVE_RIGHT)
            true
        }
        KeyEvent.KEYCODE_J -> {
            fireMachineGun()
            true
        }
        KeyEvent.KEYCODE_K -> {
            fireMissile()
            true
        }
        else -> super.onKeyUp(keyCode, event)
    }
}

Java

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    switch (keyCode) {
        case KeyEvent.KEYCODE_D:
            moveShip(MOVE_LEFT);
            return true;
        case KeyEvent.KEYCODE_F:
            moveShip(MOVE_RIGHT);
            return true;
        case KeyEvent.KEYCODE_J:
            fireMachineGun();
            return true;
        case KeyEvent.KEYCODE_K:
            fireMissile();
            return true;
        default:
            return super.onKeyUp(keyCode, event);
    }
}

التعامل مع مفاتيح التعديل

للاستجابة إلى الأحداث الرئيسية لأداة التعديل، مثلاً عند دمج مفتاح باستخدام Shift أو Control، يمكنك الاستعلام عن KeyEvent التي يتم تمريرها إلى طريقة معاودة الاتصال. عدة طرق تقدم معلومات حول مفاتيح التعديل، مثل getModifiers() وgetMetaState(). ومع ذلك، فإن أبسط الحل هو التحقق مما إذا إلا أنه يتم الضغط على مفتاح التعديل الدقيق الذي تريده بطرق مثل isShiftPressed() وisCtrlPressed().

على سبيل المثال، في ما يلي آلية تنفيذ onKeyUp() مرة أخرى، مع إمكانية معالجة إضافية عند الضغط مع الاستمرار على مفتاح Shift باستخدام أحد المفاتيح:

Kotlin

override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean {
    return when (keyCode) {
        ...
        KeyEvent.KEYCODE_J -> {
            if (event.isShiftPressed) {
                fireLaser()
            } else {
                fireMachineGun()
            }
            true
        }
        KeyEvent.KEYCODE_K -> {
            if (event.isShiftPressed) {
                fireSeekingMissle()
            } else {
                fireMissile()
            }
            true
        }
        else -> super.onKeyUp(keyCode, event)
    }
}

Java

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    switch (keyCode) {
        ...
        case KeyEvent.KEYCODE_J:
            if (event.isShiftPressed()) {
                fireLaser();
            } else {
                fireMachineGun();
            }
            return true;
        case KeyEvent.KEYCODE_K:
            if (event.isShiftPressed()) {
                fireSeekingMissle();
            } else {
                fireMissile();
            }
            return true;
        default:
            return super.onKeyUp(keyCode, event);
    }
}

مصادر إضافية