2011-12-08 81 views

回答

-3

你可以嘗試沿着該線的東西:

InputMethodManager imm = 
    (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
boolean showingKeyboard = imm.isActive(); 

希望這有助於!

編輯:

另一種選擇是簡單地強制鍵盤打開或關閉,這取決於你希望用戶看到什麼:)這將導致更可預見的使用行爲,並有可能改善用戶體驗。

+1

它返回true所有即使當我的鍵盤在屏幕 – aryaxt

+0

上不可見時,如果有人正在使用長按菜單來觸發鍵盤,這將不起作用。它只會在接收到軟鍵盤事件時激活視圖。 –

+0

@ Pheonixblade9:這不起作用,請仔細閱讀isActive()的文檔!這不是關於可見性,而是關於'主動'狀態。 – Bondax

1

嘗試thisthis的解決方法,因爲它不可能「簡單」的SDK方法調用

3

內我想這應該thread回答你的問題。總而言之,您可以爲您的活動的根視圖提供一個id,例如「@ + id/activityRoot」,然後將GlobalLayoutListener掛鉤到該視圖的ViewTreeObserver中。在監聽器是您檢查鍵盤的知名度,就像這樣:

final View activityRootView = findViewById(R.id.activityRoot); 
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
    if (getResources().getConfiguration().keyboardHidden == Configuration.KEYBOARDHIDDEN_NO) { // Check if keyboard is not hidden 
    // ... do something here 
    } 
    } 
}); 

這是@Reuben_Scratton和@約傑什在上述螺紋答案的組合。

UPDATE: 注意,對於keyboardHidden的文件說,它總是會返回Configuration.KEYBOARDHIDDEN_YES是否有可用硬鍵盤的設備上(即像摩托羅拉Droid 1 & 2)

+4

它不起作用。它總是返回Configuration.KEYBOARDHIDDEN_NO給我(我的設備上沒有硬鍵盤)。 –