В моей активности будет показано окно ShowcaseView, которое добавит в декоративный вид ((ViewGroup) activity.getWindow().getDecorView()).addView(mShowcaseView);
, и я хочу определить ключевое событие для обработки чего-либо, поэтому я переопределяю dispatchKeyEvent()
, чтобы делать то, что я хотел. но похоже, что метод dispatchKeyEvent()
никогда не вызывался, что еще хуже, PhoneWindow.DecorView#dispatchKeyEvent()
не вызвали, я не знаю почему, пожалуйста, помогите мне.Зачем использовать метод dispatchKeyEvent?
Спасибо. :)
вот мой ShowcaseView
кратко исходный код.
public class ShowcaseView extends FrameLayout {
public ShowcaseView(Context context) {
super(context);
init(context);
}
public ShowcaseView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public ShowcaseView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context context) {
setWillNotDraw(false);
setDescendantFocusability(FOCUS_AFTER_DESCENDANTS);
setFocusable(true);
setEnabled(true);
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
Log.d("Showcase", "dispatchKeyEvent: called");
super.dispatchKeyEvent(event);
return executeKeyEvent(event);
}
private boolean executeKeyEvent(KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_UP
&& event.getKeyCode() == KeyEvent.KEYCODE_DPAD_CENTER) {
hide();
}
return true;
}
}
Никто? Это не должно быть трудным ответом для людей, которые знают платформу. – SuperJMN