Клавиатура открытия / закрытия (Galaxy S) - PullRequest
0 голосов
/ 05 января 2011

Хорошо, еще одна странная проблема. У меня есть активность Main.java и DialogLikeActivity.java.

В Main У меня

EditText (articleNumber) - phone input type (in .XML)
Button (articleOK)
list (list)

Вкл. DialogLikeActivity (действие, но стилизация с темой диалога и с android: windowSoftInputMode = "stateAlwaysVisible" тег в манифесте) У меня есть

EditText (articlePackaging) - phone input type (in .XML)
Button (finish)

Что я хочу? Когда я вхожу в главное занятие, клавиатура открывается с типом ввода телефона, и это нормально. Когда я нажимаю на поле EditText, заполняю что-то и нажимаю OK, статическая переменная переходит в состояние 1 (всегда показывать клавиатуру) - это просто статическая переменная в основном действии.

public static int keyboardMode = 1;

Нажатие на ОК открывает DialogLikeActivity с открытой клавиатурой (тип телефонного входа). Когда я нажимаю ОК на Резюме основных ударов в

@Override
public void onResume() {
    super.onResume();

    if (keyboardMode == 1) {
        showKeyboard(articleNumber);
    } else {
        hideKeyboard(articleNumber);
    }
}   

public static void showKeyboard(View view) {
    InputMethodManager mgr = (InputMethodManager) myContext.getSystemService(Context.INPUT_METHOD_SERVICE);
    mgr.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);

    ((InputMethodManager) myContext.getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(view, 0);

    articleNumber.setInputType(InputType.TYPE_CLASS_PHONE);
}

public static void hideKeyboard(View view) {
    InputMethodManager mgr = (InputMethodManager) myContext.getSystemService(Context.INPUT_METHOD_SERVICE);
    mgr.hideSoftInputFromWindow(view.getWindowToken(), 0);

    articleNumber.setInputType(0);
}

// Listener to showKeyboard if user clicks on EditText field and set InputType to PHONE, insted it would remain (0)

    articleNumber.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            showKeyboard(articleNumber);
        }
    });

// Listener so when user touches the list - it hides the keyboard and sets variable on 2 so keyboard is always HIDDEN

    list.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            hideKeyboard(articleNumber);
            keyboardMode = 2;

            return false;
        }
    });

// Listener so when user clicks on ArticleOK - keyboard is always OPEN

articleOk.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {               
                keyboardMode = 1;

                    Intent i = new Intent(NewOrderArticles.this, NewQuantityDialog.class);
                    i.putExtra("articleid", articleId);
                    startActivity(i);
            }
        }
    });

И гарантирует, что клавиатура открыта с типом ввода телефона. Если я, тем не менее, щелкаю / прокручиваю список в переменной Main keyboardMode, становится равной 2 (всегда скрывать) - поэтому клавиатура скрывается (с помощью метода hideKeyboard, называемого list.onTouch listener). Если я нажимаю на какой-либо элемент в списке, он снова открывает DialogLikeActivity с открытой клавиатурой и типом ввода телефона. Если я нажму OK на Resume в Main, то пинает и прячет клавиатуру (см. Код там).

Как это выглядит, смотрите видео (кнопка OK на видео - кнопка articleOK) - Видео (3,24 МБ) .

Так на самом деле - если я нажимаю кнопку OK (articleOK) - клавиатура всегда должна отображаться , если я, однако, начинаю прокручивать список или нажимаю на какой-либо элемент в списке - клавиатура должна показываться только в активности DialogLikeActivity , в противном случае в Main оно должно оставаться скрытым (конечно, если я нажму на поле EditText вверху, оно снова откроется).

На видео вы можете видеть HTC Desire, и все работает так, как я хочу, но - на Galaxy S всегда показывает часть работает, но если я нажимаю / прокручиваю список, это Клавишу open up с буквенным типом (!) вместо ее скрытия . Где проблема?

Итак, кнопка ОК - всегда показывать клавиатуру (в режиме Main и DialogLikeActivity). Если нажать / прокрутить список, отобразите клавиатуру только в DialogLikeActivity.

1 Ответ

2 голосов
/ 20 января 2011

У меня та же проблема с EditText, который выскакивает на клавиатуре с цифрами.После нажатия кнопки «ОК» или «Отмена» виртуальная клавиатура не скрывается и показывает клавиатуру с буквенным типом на устройстве Samsung Galaxy S.Он отлично работает на эмуляторах 2.1 или 2.2 и моем HTC Hero, но не на устройстве Samsung Galaxy S с 2.2.Я также пытался: mgr.toggleSoftInput (InputMethodManager.HIDE_IMPLICIT_ONLY, 0);но все еще нет шансов

РЕДАКТИРОВАТЬ: хорошо, проблема решена только с этой строкой:

mgr.toggleSoftInput(0, 0);

и без этих 2 строк:

mgr.hideSoftInputFromWindow(view.getWindowToken(), 0);
articleNumber.setInputType(0);
...