0

ユーザーに「キーを押す」ように求める簡単なカスタムダイアログを作成しました。これの目的は、彼らが押したキーをアプリの関数にマッピングできるようにすることです。残念ながら、重要なイベントを検出するために使用する正しいインターフェイスが何であるかを理解できません。私のクラスは次のようになります。

public class ScancodeDialog extends Dialog implements OnKeyListener
{

    public ScancodeDialog( Context context )
    {
        super(context);
        setContentView( R.layout.scancode_dialog );
        setTitle( "Key Listener" );
        TextView text = (TextView) findViewById( R.id.scancode_text );
        text.setText( "Please press a button.." );
        ImageView image = (ImageView) findViewById( R.id.scancode_image );
        image.setImageResource( R.drawable.icon );
        getWindow().setFlags( WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
                              WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM );
    }

    @Override
    public boolean onKey( DialogInterface dialog, int keyCode, KeyEvent event )
    {
        if( keyCode != KeyEvent.KEYCODE_MENU )
            dismiss();
        return true;
    }
}

getWindow()。setFlags()行を使用して、または使用せずに試してみました(これは別の質問からの提案でしたが、私の場合は役に立ちませんでした)。もちろん、後でクラスに機能を追加しますが、今のところ、ユーザーがキーを押すたびにダイアログボックスが閉じるはずです。ただし、onKeyが呼び出されることはありません。

私はもともと、Viewのキーリスナーインターフェイスを使用してみました。

import android.view.View.OnKeyListener;

ただし、ダイアログはビューではないため、これは機能しませんでした。DialogInterfaceからのものも試しました:

import android.content.DialogInterface.OnKeyListener;

APIはDialogがDialogInterfaceを実装していることを示しているので、これはより良い選択のように思えましたが、それでもキーイベントを受信して​​いません。私が試すことができる提案はありますか?

4

1 に答える 1

1

キーをリッスンするダイアログを宣言したことはありません。

例:

this.setOnKeyListener(...)

thisキーワードは、それが含まれているクラスを参照しています。これはダイアログです。

于 2011-12-16T04:13:38.750 に答える