ユーザーに「キーを押す」ように求める簡単なカスタムダイアログを作成しました。これの目的は、彼らが押したキーをアプリの関数にマッピングできるようにすることです。残念ながら、重要なイベントを検出するために使用する正しいインターフェイスが何であるかを理解できません。私のクラスは次のようになります。
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を実装していることを示しているので、これはより良い選択のように思えましたが、それでもキーイベントを受信していません。私が試すことができる提案はありますか?