我有这个Android应用程序,我试图工作,但当我试图保持软键盘隐藏在屏幕上(硬件包括键盘)为这个特定的警报对话框,它不会保持隐藏,尽管事实上,我遵循相同的设置作为以前的警报对话框,这确实工作。
下面的函数enterItem的功能与我预期的完全相同,这意味着当有人使用硬件输入数据时,它不会调出软键盘。
public void enterItem() {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
View viewInflated = LayoutInflater.from(context).inflate(R.layout.dialog_keyin_number_field, null);
final EditText userInputDialogEditText = viewInflated.findViewById(R.id.keyInNumber);
userInputDialogEditText.setBackgroundColor(getColor(R.color.colorPrimary));
builder
.setTitle(reason.getDescription())
.setMessage("Enter/Scan Item: ")
.setView(viewInflated)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String input = userInputDialogEditText.getText().toString();
if (StringUtils.isNotNullOrEmpty(input)) {
new AsyncVerifyItemWS().execute(input);
}
}
})
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});//end builder
AlertDialog dialog = builder.create();
dialog.show();
userInputDialogEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if(actionId == EditorInfo.IME_ACTION_UNSPECIFIED || actionId == EditorInfo.IME_ACTION_DONE){
dialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick();
}
return false;
}
});
userInputDialogEditText.setShowSoftInputOnFocus(false);
}
然而,这个功能并不像我期望的那样起作用。我开始在硬件键盘上打字的第二秒,软键盘就会弹出,并且不会随着任何后续的点击而消失。
public void enterComment(){
AlertDialog.Builder builder = new AlertDialog.Builder(context);
View viewInflated = LayoutInflater.from(context).inflate(R.layout.dialog_text_area_field, null);
final EditText userInputDialogEditText = viewInflated.findViewById(R.id.keyInText);
userInputDialogEditText.setBackgroundColor(getColor(R.color.lightGrey));
builder
.setTitle(reason.getDescription())
.setMessage("Enter Comment: ")
.setView(viewInflated)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
comments = userInputDialogEditText.getText().toString();
//move on...
}
})
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//move on...
}
});
AlertDialog dialog = builder.create();
dialog.show();
userInputDialogEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if(actionId== EditorInfo.IME_ACTION_UNSPECIFIED || actionId == EditorInfo.IME_ACTION_DONE){
dialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick();
}
return false;
}
});
userInputDialogEditText.setShowSoftInputOnFocus(false);
}
除了使用setShowSoftInputOnFocus(false)
之外,我还尝试使用userInputDialogEditText.setInputType(InputType.TYPE_NULL);
以及以下函数:
InputMethodManager imm = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
输入法管理器(放置在onEditorAction()
中)不会改变任何东西,虽然使用setInputType(InputType.TYPE_NULL)
确实有效,但它会删除屏幕上 Flink 的位置栏。
我是非常新的Android开发,没有人,我的工作似乎有任何想法,如何使这项工作,所以任何帮助将不胜感激。
1条答案
按热度按时间fafcakar1#
在找到一个更好的方法来研究我的问题后回答我自己的问题。我个人不喜欢这个答案。最后一个EditText小部件的工作方式与Activity中的其他小部件不同,但通过向对象添加
OnKeyListener()
,这对我来说没有意义。我可以完全阻止软键盘出现在屏幕上,每点击一次屏幕底部仍然有 *is * Flink 的图标,但软键盘仍然隐藏。