2011-09-13 48 views
3

我有一個遊戲,使用C++的Java回調來強制在用戶觸摸屏幕時打開軟鍵盤。 Java代碼很簡單:如何強制從本機代碼打開Android軟鍵盤?

this._inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); 

這一直很好了一段時間,但最近我們已經收到一些摩托羅拉Droid的用戶投訴,軟鍵盤無法打開它們。由於我們最近纔開始接受這些投訴,並且這是很多用戶,我認爲這是對這些設備的某種更新。

有沒有更好的方法,我可以強制鍵盤打開?我在網上找到的所有鏈接都討論了使用文本框控件等,但我的應用程序主要是C++,根本不使用標準控件。

回答

5

我不知道這是否與您的問題有關,但是當有些設備有時會出現「不同步」並隱藏我想要顯示和隱藏時,我僅使用InputMethodManager.toggleSoftInput()反之亦然。

我採取的事實優勢,取得了一些成功,雖然IMM.showSoftInput()不會顯示鍵盤,IMM.hideSoftInputFromWindow()可靠密切的,所以當我想展示我現在調用IMM.hideSoftInputFromWindow(),然後是IMM.toggleSoftInput(),並使用IMM.hideSoftInputFromWindow()自己來隱藏一個鍵盤。

[一天後...]

編寫昨日上述使我重新思考我是如何使用軟鍵盤處理(我的意思是,showSoftinput()工作,只是沒有我們預期的方式到),所以這裏有更好的方法:

首先,你需要設置你的視圖,以便Android知道它可以有一個軟鍵盤 - 在InputMethodManager的文檔中描述。在我的情況我已經從GLSurfaceView衍生的單一視圖,所以我說:

setFocusable(true); 
setFocusableInTouchMode(true); 

的構造函數,然後下面的2所覆蓋:

@Override 
public InputConnection onCreateInputConnection(EditorInfo outAttrs) 
{ 
    outAttrs.actionLabel = ""; 
    outAttrs.hintText = ""; 
    outAttrs.initialCapsMode = 0; 
    outAttrs.initialSelEnd = outAttrs.initialSelStart = -1; 
    outAttrs.label = ""; 
    outAttrs.imeOptions = EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI;   
    outAttrs.inputType = InputType.TYPE_NULL;   

    return new BaseInputConnection(this, false);  
}  

@Override 
public boolean onCheckIsTextEditor() 
{ 
    return true; 
} 

現在我可以顯示鍵盤:

InputMethodManager mgr = (InputMethodManager)mActivity.getSystemService(Context.INPUT_METHOD_SERVICE); 
mgr.showSoftInput(mView, 0); 

並通過視圖的onKeyUp()和onKeyDown()方法報告按鍵。

掩藏它使用hideSoftInputFromWindow仍然完成()

+0

這是我聽過的最好的建議。不幸的是,我不能在實際遇到問題的設備上測試此功能,因爲我們沒有任何功能,但是我會試用此功能。如果有效,我會將其標記爲答案。謝謝! –

+0

試過這個和它的一些變化,但問題仍然出現在Droid仿生。我所做的任何事似乎都無法成功地打開該設備上的軟鍵盤。 –

+0

你有機會獲得仿生嗎?我真的很好奇,如果鍵盤適用於「PocketSat3演示」(免費從市場)。該應用程序啓動與鍵盤兼容性測試。 – jimkberry

相關問題