打开/关闭软键盘(Galaxy S)

时间:2011-01-05 17:56:38

标签: android android-softkeyboard galaxy

好吧,另一个奇怪的问题。我有活动Main.java和DialogLikeActivity.java。

Main 我有

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

DialogLikeActivity (活动但使用Dialog主题设置样式,并且在Manifest中使用 android:windowSoftInputMode =“stateAlwaysVisible”标记)我有

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

我想要什么?当我进入主活动键盘打开时,手机输入类型,这很好。当我单击EditText字段时,填写一些内容并单击OK,静态变量变为状态1(始终显示键盘) - 它只是主要活动中的静态变量。

public static int keyboardMode = 1;

点击OK打开DialogLikeActivity,键盘打开(手机输入类型)。当我在

中点击OK onResume of Main Kicks时
@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);
            }
        }
    });

确保键盘打开时手机输入类型。如果我如何点击/滚动主键盘中的列表键盘变量变为2(总是隐藏) - 所以键盘隐藏(使用名为list.onTouch监听器的hideKeyboard方法)。如果我点击列表中的某个项目,它会再次打开DialogLikeActivity并打开键盘和手机输入类型。如果我点击确定onResume in Main kicks in并隐藏键盘(参见代码)。

看起来如何看视频(视频中的确定按钮是文章按钮) - Video (3,24 MB)

实际上 - 如果我单击OK(articleOK)按钮 - 键盘必须始终显示,如果我,但是开始滚动列表或点击列表中的某些项目 - 键盘必须仅在DialogLikeActivity活动中显示,否则在Main中它必须保持隐藏(当然,如果我点击顶部的EditText字段,它会再次打开)。

在视频中你可以看到HTC Desire,一切都按照我想要的方式工作,但是 - 在Galaxy S上总是显示部分正在工作,但如果我点击/滚动列表,它用字母类型(!)打开键盘而不是隐藏它。问题出在哪里?

所以OK按钮 - 始终显示键盘(在Main和DialogLikeActivity中)。如果仅在DialogLikeActivity中点击/滚动列表显示键盘。

1 个答案:

答案 0 :(得分:2)

我在使用EditText弹出键盘时遇到同样的问题。单击“确定”或“取消”后,三星Galaxy S设备上的虚拟键盘不会隐藏并显示带字母类型的键盘。 它在Emulators 2.1或2.2以及我的HTC Hero上工作正常,但在2.2的三星Galaxy S设备上没有。 我也尝试过: mgr.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY,0); 但仍然没有机会

编辑:好的,问题仅通过此行解决了:

mgr.toggleSoftInput(0, 0);

没有这两行:

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