Android: программная клавиатура не появится для текстового представления после setContentView - PullRequest
0 голосов
/ 05 октября 2011

У меня проблема с просмотром текста в моем приложении.Когда приложение запускается в первый раз, оно работает отлично, но когда я переключаюсь в другое представление с помощью setContentView, а затем снова возвращаюсь, программная клавиатура больше не открывается, но я могу выделить текст.

Вот кодфрагмент, когда я пытаюсь переключиться обратно:

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

Даже если я не вызываю setText, я получаю проблему.

Ответы [ 2 ]

1 голос
/ 05 октября 2011

У меня была похожая проблема с программной клавиатурой;хотя в моем случае это не показывалось бы даже без переключения представлений с setContentView.После некоторых экспериментов я нашел решение, которое все еще работает для меня.Идея заключалась в том, чтобы перехватить отображение / скрытие программной клавиатуры для любого потомка EditText.Для этого я переопределил onWindowFocusChanged из Activity.

Хитрость была в том, чтобы скрыть клавиатуру, когда она больше не нужна.

Как видите, я использовал toggleSoftInput с 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;
    }

}
0 голосов
/ 05 октября 2011

в файле манифеста, который вы можете использовать в декларации активности

android:windowSoftInputMode="stateVisible|adjustPan"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...