【发布时间】:2016-02-18 21:08:03
【问题描述】:
我有一个 Android 应用程序,其中一部分显示了 AlertDialog。在那个 AlertDialog 中,我有一个 EditText,它预先填充了 prefs 中的值,用户可以更改它。
代码工作得很好,但是,为了更直观的用户体验,我想要做的是,当弹出警报对话框时,首选项中的预填充值已经突出显示并且键盘准备好了。
到目前为止,我已经很好地完成了输入突出显示,但我无法让键盘弹出或以编程方式使请求焦点工作。这是我的代码:
private void showPrefixChangerDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Set Pipe Prefix");
final EditText input = new EditText(this);
input.setInputType(InputType.TYPE_CLASS_NUMBER);
input.setGravity(Gravity.CENTER_HORIZONTAL);
input.setText(pipePrefix);
input.setSelection(0, 2);
input.performClick();
input.requestFocus();
InputFilter[] filters = new InputFilter[1];
filters[0] = new InputFilter.LengthFilter(2);
input.setFilters(filters);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(input, InputMethodManager.SHOW_IMPLICIT);
builder.setView(input);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String finalInput = input.getText().toString();
saveInputToPrefs(finalInput);
tv.setText("Pipe Prefix is " + finalInput);
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
}
如您所见,我尝试使用performClick()、requestFocus() 和InputManager,但都无济于事。
【问题讨论】:
标签: android