2011-12-16 4 views
0

ユーザーに「キーを押してください」と尋ねる簡単なカスタムダイアログを作成しました。これの目的は、アプリケーションの機能にどのキーを押してもマップできるようにすることです。残念ながら、私はキーイベントを検出するために使用する正しいインタフェースが何であるか把握できません。 。私はとは、GetWindow()なしでそれを試してみたDialogクラス(Android SDK)からキーイベントを検出するために使用するインターフェイスはどれですか?

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; 
    } 
} 

でsetFlags()行(つまり、私の場合で私を助けていない別の質問からの提案だった):私のクラスでは、このようになります。当然のことながら、後でクラスに多くの機能を追加しますが、ユーザーがキーを押すたびにダイアログボックスを閉じる必要があります。ただし、onKeyは決して呼び出されません。

import android.view.View.OnKeyListener; 

をしかし、ダイアログではなくビューであることから、これは動作しませんでした:

私はもともとビューからキーリスナーインタフェースを使用してみました。 APIは、ダイアログがDialogInterfaceを実装していることを示しているので、

import android.content.DialogInterface.OnKeyListener; 

これは、より良い選択のように思えたが、私はまだキーイベントを受信して​​いない:私はまたDialogInterfaceから1を試してみました。私は何を試すことができますか?

答えて

1

ダイアログをキーを聞くように宣言したことはありません。

例:

this.setOnKeyListener(...) 

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

+0

onkeyリスナーは 'this' ..私は "this.setOnKeyListener(this)"に行きますか?それは重複しているようだが、私は試してみる.. – paulscode

+0

それはうまくいった、あなたは天才だ!私はそれを試みることは決して考えなかったでしょう。 A +++ – paulscode

+0

また、全体を実装する代わりに匿名のリスナーを試すこともできます。 – JoxTraex

関連する問題