0

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

主要我有

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

DialogLikeActivity(活动,但样式为 Dialog 主题和清单中的android:windowSoftInputMode="stateAlwaysVisible"标记)我有

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

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

public static int keyboardMode = 1;

单击确定打开 DialogLikeActivity 并打开键盘(电话输入类型)。当我单击 OK onResume of Main 时

@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(始终隐藏) - 所以键盘隐藏(使用名为 list.onTouch 侦听器的 hideKeyboard 方法)。如果我单击列表中的某个项目,它会再次打开 DialogLikeActivity 并打开键盘和电话输入类型。如果我在 Main 中单击 OK onResume 会启动并隐藏键盘(请参阅上面的代码)。

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

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

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

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

4

1 回答 1

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);
于 2011-01-20T11:17:38.657 回答