2011-10-03 56 views
1

我是Android開發新手。我的要求是當我點擊EditText小部件的外部時,我想隱藏android虛擬鍵盤。請幫忙。如何通過單擊EditText的外部來隱藏虛擬鍵盤?

+0

下面的一些偉大的答案。請記住,對於android用戶來說,點擊後退或完成按鈕來關閉鍵盤是正常的,而不是像在iPhone上那樣觸摸編輯文本的外部。 – sgarman

+0

當我按下後退按鈕時,應用程序將被關閉 – androider

+0

通常,當鍵盤打開時,我想離開應用程序,我希望按下一次以關閉鍵盤,然後再返回以保留當前可見活動。如果這是堆棧中的最後一項活動,那麼我預計會「退出」應用程序。 – sgarman

回答

5

要隱藏你可以執行以下代碼的虛擬鍵盤:

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0); 

簡單地把這些代碼的OnTouchListeneronTouchDown()方法是聯繫在一起的父佈局內。

+0

這包裝在重寫的dispatchTouchEvent()中,正如Ram在其他答案中所建議的那樣效果很好。 – miek

+0

雅它會關閉,但如果你點擊第二個edittext(如果可用)它不會得到焦點。鍵盤不會打開。請給出另一個答案。我嘗試了很多形式的stackoverflow。 – user3546693

3

只要檢查一下。

@Override 
public boolean dispatchTouchEvent(MotionEvent event) { 
View view = getCurrentFocus(); 
boolean ret = super.dispatchTouchEvent(event); 

if (view instanceof EditText) { 
    View w = getCurrentFocus(); 
    int scrcoords[] = new int[2]; 
    w.getLocationOnScreen(scrcoords); 
    float x = event.getRawX() + w.getLeft() - scrcoords[0]; 
    float y = event.getRawY() + w.getTop() - scrcoords[1]; 

    if (event.getAction() == MotionEvent.ACTION_UP 
&& (x < w.getLeft() || x >= w.getRight() 
|| y < w.getTop() || y > w.getBottom())) { 
     InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(getWindow().getCurrentFocus().getWindowToken(), 0); 
    } 
} 
return ret; 
} 

重寫此方法,你必須編輯文本在您的活動..

+0

似乎沒有任何座標檢查就可以正常工作。 – miek

+0

@miek如果你刪除了座標檢查,那麼鍵盤在下次點擊EditText時不會顯示。 –