2

Adobe Flash Builder 4.6 を使用してモバイル AIR アプリ (Android & IOS) を構築していますが、この厄介な問題が発生しています。

Android デバイスでバックキーを「キャッチ」したいので、メイン クラスに次のコードを追加しました。

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown);

private function keyDown(k:KeyboardEvent):void {    
if(k.keyCode == Keyboard.BACK) {
    backClicked(); // function handling the back-action, not important 
    k.preventDefault();
}

今、別の場所-いくつかのクラスにネストされています-テキストフィールドがあります:

TF = new TextField();
TF.type = TextFieldType.INPUT;

しかし、テキスト フィールドにフォーカスを設定すると、ソフト キーボードは表示されますが、1 文字も入力できません。キーリスナーを無効にすると、問題ありません。

リスナーが私の入力フィールドをオーバーライドしているようです。これに関する回避策はありますか?

4

1 に答える 1

3

モバイルアプリの戻るボタン機能も実装しましたが、特定のビューがアクティブ化されたときにのみキーダウンイベントを登録し、ビューが非アクティブ化されたときに登録を削除していました。

in <s:view ....... viewActivate ="enableHardwareKeyListeners(event)" viewDeactivate="destroyHardwareKeyListeners(event)">
// add listener only for android device
if (Check for android device) {
    NativeApplication.nativeApplication.addEventListener(KeyboardEvent.KEY_DOWN, handleHardwareKeysDown, false, 0);
    NativeApplication.nativeApplication.addEventListener(KeyboardEvent.KEY_UP, handleHardwareKeysUp, false, 0); 
    this.setFocus();                    
}


private function destroyHardwareKeyListeners(event:ViewNavigatorEvent):void
{
    if (NativeApplication.nativeApplication.hasEventListener(KeyboardEvent.KEY_DOWN))
        NativeApplication.nativeApplication.removeEventListener(KeyboardEvent.KEY_DOWN, handleHardwareKeysDown);
    if (NativeApplication.nativeApplication.hasEventListener(KeyboardEvent.KEY_UP))
        NativeApplication.nativeApplication.removeEventListener(KeyboardEvent.KEY_UP, handleHardwareKeysUp);
}

private function handleHardwareKeysDown(e:KeyboardEvent):void
{
    if (e.keyCode == Keyboard.BACK) {
        e.preventDefault();
        // your code
    } else {

    }
}           

private function handleHardwareKeysUp(e:KeyboardEvent):void
{
    if (e.keyCode == Keyboard.BACK)
        e.preventDefault();
}

これがあなたを助けることができますように。

于 2013-03-21T19:08:37.740 に答える