Android:在setContentView之后,软键盘不会出现在文本视图中

时间:2011-10-05 04:55:04

标签: android android-softkeyboard textview

我的应用程序中遇到textview问题。当应用程序第一次运行时,它工作得非常好,但是当我使用setContentView交换到不同的视图然后再返回时,软键盘将不会长时间打开,但我可以选择文本。

以下是我尝试切换回时的代码段:

 public void setToMain(String _word)
    {
        setContentView(R.layout.main);
        mWordInput = (TextView) findViewById(R.id.wordInput);
        mWordInput.setText(_word);
    }

即使我没有调用setText,我也会遇到问题。

2 个答案:

答案 0 :(得分:1)

我的软键盘出现了类似的问题;虽然在我的情况下即使没有使用setContentView切换视图也不会显示。经过一些实验,我找到了仍然适合我的解决方案。这个想法是拦截任何EditText后代的软键盘显示/隐藏。为此,我重写了活动的WindowsFocusChanged。

诀窍在于不再需要时隐藏键盘。

正如您所看到的,我使用了shggleSoftInput和SHOW_IMPLICIT而不是任何HIDE常量。在这种情况下,只有当焦点视图需要时,IMEManager才会保持键盘可见,否则它将被隐藏。

private boolean softInputActive;

@Override
public void onWindowFocusChanged(boolean hasFocus) {

    super.onWindowFocusChanged(hasFocus);

    InputMethodManager IMEManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

    View focusedView = getCurrentFocus();

    // Find the primitive focused view (not ViewGroup)
    while (focusedView instanceof ViewGroup) {
        focusedView = ((ViewGroup) focusedView).getFocusedChild();
    }


    if (hasFocus) {

        if (focusedView instanceof EditText && focusedView.isEnabled()
                && !IMEManager.isActive(focusedView)) {
            IMEManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
            softInputActive = true;
        }
    } else if (softInputActive) {
        if (focusedView != null && IMEManager.isActive()) {
            IMEManager.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);
        }
        softInputActive = false;
    }

}

答案 1 :(得分:0)

您可以在活动声明

中使用的清单文件中的

android:windowSoftInputMode="stateVisible|adjustPan"