Какой интерфейс используется для обнаружения ключевых событий из класса Dialog (Android SDK)? - PullRequest
0 голосов
/ 16 декабря 2011

Я создал простой настраиваемый диалог, который просит пользователей «Нажать клавишу». Цель этого состоит в том, чтобы я мог сопоставить любую клавишу, которую они нажимают, с функцией в приложении. К сожалению, я не могу понять, какой правильный интерфейс использовать для обнаружения ключевых событий. Мой класс выглядит так:

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, но я до сих пор не получаю ключевые события. Любые предложения, которые я могу попробовать?

1 Ответ

1 голос
/ 16 декабря 2011

Вы никогда не объявляли диалог для прослушивания клавиш.

Пример:

this.setOnKeyListener(...)

ключевое слово this ссылается на класс, в котором оно находится .. которое является диалогом.

...