2015-02-11 31 views
0

我感到有點內疚,因爲有很多問題,但我找不到解決方案。如何讓我的EditText在我碰別的東西時失去焦點?

如何讓我的(單人)EditText在我外面接觸時失去焦點?通過焦點我的意思是視圖正準備獲得輸入,光標可見。我會好的:

  • 查看失去的重點,當我觸及其他事物(例如,外部空白);
  • 當我在佈局中觸摸其他視圖時會失去焦點。

現在,答案大多是說如何通過添加一個click偵聽所有其他視圖,達到第二個目標。這是可能的,但不是我認爲的最佳方式。

至於第(查看只要你碰之外失去焦點)大量的輸入來自何處:

可聚焦視圖(如本的EditText )只有在另一個可聚焦的觀點獲得時纔會失去焦點。大多數視圖默認情況下不支持焦點。

活像的最終解決方案,但設置android:focusable(或在觸摸模式可聚焦)上的其他元素(試了RatingBar和整體Layout),我什麼也沒做。

  • this問題,人們的解決方案,涉及觸摸點的getX()/getY(),並檢查它是否是在編輯文本里面走了過來。我發現問題本身比問題更復雜,而且如果你有多個編輯文本,就會感到沮喪。

對於這樣的共同願望還有什麼其他嗎?從概念上講,爲什麼如果我給EditText提供輸入並點擊(例如在評級欄上)該視圖應該仍然集中並等待,並且其閃爍的光標?

回答

2

你可以用dispatchTouchEvent完成。

@Override 
    public boolean dispatchTouchEvent(MotionEvent event) { 
    if (event.getAction() == MotionEvent.ACTION_DOWN) { 
    if (mEditText.isFocused()) { 
     Rect outRect = new Rect(); 
     mEditText.getGlobalVisibleRect(outRect); 
     if (!outRect.contains((int)event.getRawX(),(int)event.getRawY())) { 
      mEditText.clearFocus(); 
      // 
      // Hide keyboard 
      // 
      InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(v.getWindowToken(), 0); 
     } 
     } 
    } 
return super.dispatchTouchEvent(event); 
} 

使用更多數量的編輯文本將會有點困難。所以當我遇到類似的問題時,我碰到了它,並認爲我會分享我最終做的事情。

獲得焦點的觀點是每次都不同,所以我用了很一般:

View current = getCurrentFocus(); 
if (current != null) current.clearFocus(); 

您可以在dispatchTouchEvent調用它。

+0

這個答案實際上與我的問題有關(請參閱我討論getX()/ getY()時),正如我所說我正在尋找更簡單的解決方案。如果您有多個編輯文本,這會很痛苦。 – natario 2015-02-11 13:37:13

+0

我更新了我的代碼。你可以檢查它並讓我@m iav – 2015-02-12 05:15:36

相關問題