2011-12-16 3 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

당신은 결코 대화를 키를 듣기로 선언하지 않았습니다.

예 :

this.setOnKeyListener(...) 

this 키워드가이 대화 상자이다 .. 인 클래스를 참조한다.

+0

onkey 리스너는 'this'입니다. 그냥 "this.setOnKeyListener (this)"로 가야합니까? 그것은 중복 것처럼 보이지만, 내가하려고합니다 .. – paulscode

+0

그게 효과, 당신은 천재 야! 나는 그것을 결코 시도하지 않았을 것이다. A +++ – paulscode

+0

아니면 전체를 구현하는 대신 익명의 수신기를 사용해 볼 수도 있습니다. – JoxTraex