好吧,另一个奇怪的问题 . 我有活动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(始终显示键盘) - 它只是Main活动中的静态变量 .
public static int keyboardMode = 1;
单击OK打开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);
}
}
});
并确保键盘打开时手机输入类型 . 如果我如何点击/滚动主键盘中的列表键盘变量变为2(总是隐藏) - 所以键盘隐藏(使用名为list.onTouch监听器的hideKeyboard方法) . 如果我点击列表中的某个项目,它会再次打开DialogLikeActivity并打开键盘和手机输入类型 . 如果我点击OK onResume in Main kicks in并隐藏键盘(参见代码) .
这看起来怎么样请看视频(视频中的OK按钮是articleOK按钮) - Video (3,24 MB) .
所以实际上 - 如果我单击OK(articleOK)按钮 - keyboard always must be shown ,如果我,但是开始滚动列表或单击列表中的某个项目 - keyboard must be shown only in DialogLikeActivity activity ,否则在Main中它必须保持隐藏(当然,如果我点击EditText字段顶部再次打开) .
在视频中你可以看到HTC Desire,一切都按我想要的方式工作,但是 - 在Galaxy S上 always show part 正在工作,但如果我点击/滚动列表, it open's up keyboard with letter type (!) instead of hiding it . 哪里出了问题?
所以OK按钮 - 总是显示键盘(在Main和DialogLikeActivity中) . 如果仅在DialogLikeActivity中点击/滚动列表显示键盘 .
1 回答
我有一个EditText同样的问题,弹出键盘上的数字 . 单击“确定”或“取消”后,三星Galaxy S设备上的虚拟键盘不会隐藏并显示带字母类型的键盘 . 它在Emulators 2.1或2.2以及我的HTC Hero上工作正常,但在2.2的三星Galaxy S设备上没有 . 我也尝试过:mgr.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY,0);但仍然没有机会
编辑:好的,只有这条线解决了问题:
没有这两行: