如何将光标移至 EditText 并在 AlertDialog 弹出窗口中自动调出键盘
How to bring the cursor to EditText and bring up the keyboard automatically on AlertDialog popup
我正在尝试制作一个待办事项应用程序。您单击一个按钮,弹出一个弹出窗口,您可以在其中输入文本,然后单击添加按钮将其添加到列表中。我想让键盘在适当的时候出现:
1) 当用户点击按钮时,他应该能够输入文本而无需点击编辑文本字段。
2) 用户点击添加后,键盘应该消失而不是消失,直到用户按下返回键。
我知道这个问题已经被问过很多次,但解决方案似乎对我不起作用。这是代码:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final EditText taskEditText = new EditText(MainActivity.this);
AlertDialog dialog = new AlertDialog.Builder(MainActivity.this)
.setTitle("Add a new task")
.setMessage("What do you want to do next?")
.setView(taskEditText)
.setNegativeButton("Add", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
taskEditText.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(taskEditText, InputMethodManager.SHOW_IMPLICIT);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
String task = String.valueOf(taskEditText.getText());
SQLiteDatabase db = mHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(TaskContract.TaskEntry.COL_TASK_TITLE, task);
db.insertWithOnConflict(TaskContract.TaskEntry.TABLE,
null,
values,
SQLiteDatabase.CONFLICT_REPLACE);
db.close();
updateUI();
}
})
.setPositiveButton("Cancel", null)
.create();
dialog.show();
}
});
updateUI();
}
这个问题之前有点不同,我得到的答复对我不起作用。
您可以通过调用 teskEditText.requestFocus()
将焦点分配给 EditText
。如果这没有调出键盘,您还可以添加行 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
。
奖金问题:
如果您想要 EditText
文本下方没有线条,您可以添加背景。
例如,我想要 EditText
上的白色背景没有下划线,因此我在布局 XML 文件中设置了 android:background="#ffffff"
。这也可以通过 taskEditText.setBackgroundColor();
以编程方式完成
final EditText taskEditText = new EditText(MainActivity.this);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(taskEditText, InputMethodManager.SHOW_IMPLICIT);
尝试强制您的软键盘在您的 EditText 上生成?
好的,r/androiddev 上的用户回答了这个问题,这是唯一对我有用的方法:
public void showKeyboard(EditText editText) {
keyboardShown = true;
editText.requestFocus();
editText.postDelayed(new Runnable() {
@Override
public void run() {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
}
}, 100);
}
public void hideKeyboard() {
if (keyboardShown) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
}
}
我正在尝试制作一个待办事项应用程序。您单击一个按钮,弹出一个弹出窗口,您可以在其中输入文本,然后单击添加按钮将其添加到列表中。我想让键盘在适当的时候出现:
1) 当用户点击按钮时,他应该能够输入文本而无需点击编辑文本字段。
2) 用户点击添加后,键盘应该消失而不是消失,直到用户按下返回键。
我知道这个问题已经被问过很多次,但解决方案似乎对我不起作用。这是代码:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final EditText taskEditText = new EditText(MainActivity.this);
AlertDialog dialog = new AlertDialog.Builder(MainActivity.this)
.setTitle("Add a new task")
.setMessage("What do you want to do next?")
.setView(taskEditText)
.setNegativeButton("Add", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
taskEditText.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(taskEditText, InputMethodManager.SHOW_IMPLICIT);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
String task = String.valueOf(taskEditText.getText());
SQLiteDatabase db = mHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(TaskContract.TaskEntry.COL_TASK_TITLE, task);
db.insertWithOnConflict(TaskContract.TaskEntry.TABLE,
null,
values,
SQLiteDatabase.CONFLICT_REPLACE);
db.close();
updateUI();
}
})
.setPositiveButton("Cancel", null)
.create();
dialog.show();
}
});
updateUI();
}
这个问题之前有点不同,我得到的答复对我不起作用。
您可以通过调用 teskEditText.requestFocus()
将焦点分配给 EditText
。如果这没有调出键盘,您还可以添加行 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
。
奖金问题:
如果您想要 EditText
文本下方没有线条,您可以添加背景。
例如,我想要 EditText
上的白色背景没有下划线,因此我在布局 XML 文件中设置了 android:background="#ffffff"
。这也可以通过 taskEditText.setBackgroundColor();
final EditText taskEditText = new EditText(MainActivity.this);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(taskEditText, InputMethodManager.SHOW_IMPLICIT);
尝试强制您的软键盘在您的 EditText 上生成?
好的,r/androiddev 上的用户回答了这个问题,这是唯一对我有用的方法:
public void showKeyboard(EditText editText) {
keyboardShown = true;
editText.requestFocus();
editText.postDelayed(new Runnable() {
@Override
public void run() {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
}
}, 100);
}
public void hideKeyboard() {
if (keyboardShown) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
}
}