我创建了一个简单的自定义对话框,要求用户“按一个键”。这样做的目的是让我可以将他们按下的任何键映射到应用程序中的功能。不幸的是,我无法弄清楚用于检测关键事件的正确接口是什么。我的课看起来像这样:
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;
但是由于 Dialog 不是视图,所以这不起作用。我还尝试了 DialogInterface 中的那个:
import android.content.DialogInterface.OnKeyListener;
这似乎是一个更好的选择,因为 API 表明 Dialog 实现了 DialogInterface,但我仍然没有收到关键事件。我可以尝试任何建议吗?