2015-12-07 128 views
4

我的活動將顯示一個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; 
} 
} 
+0

沒有人?對於瞭解該平臺的人來說,這不應該很難回答。 – SuperJMN

回答

0

根據https://developer.android.com/training/keyboard-input/commands.html

注:在處理與該KeyEvent類和相關API的鍵盤事件,你應該預料到這樣的鍵盤事件從硬件鍵盤只來了。您絕對不應該依賴軟鍵輸入法(屏幕鍵盤)上的任何按鍵接收鍵盤事件。

要從屏幕鍵盤分派關鍵事件,您可以將textWatcher添加到editText。

editText.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

      } 

      @Override 
      public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

      } 

      @Override 
      public void afterTextChanged(Editable editable) { 

      } 
     }); 

但我看不到您的代碼段中的輸入字段。

相關問題