xba*_*esx 4 android ime android-edittext android-alertdialog
我想要一个带有EditText字段的AlertDialog来接受输入.这本身就很简单.但是,有一些"显而易见"的功能,我想从这个请求中得到影响.我会一个接一个地拿它们.我正在寻找那些对这些事情有更简单解决方案的人.我猜测解决方案是,"编写自己的自定义对话框,你懒惰的屁股."
AlertDialog 与 EditText
final EditText input = new EditText(context);
final AlertDialog dlg = new AlertDialog.Builder(this).
setTitle("Title").
setView(input).
setCancelable(false).
setPositiveButton(android.R.string.ok, new OnClickListener()
{
@Override
public void onClick(final DialogInterface dialog, final int which)
{
/* Handle ok clicked */
dialog.dismiss();
}
}).
setNegativeButton(android.R.string.cancel, new OnClickListener()
{
@Override
public void onClick(final DialogInterface dialog, final int which)
{
/* Handle cancel clicked */
dialog.dismiss();
}
}).create();
dlg.show();
Run Code Online (Sandbox Code Playgroud)
是的,很棒.如果输入字段立即聚焦(并显示键盘),那肯定会很好,对吗?
AlertDialog聚焦EditText
以下代码将是create()之前和之后dlg.show()
/** This requires API Level 8 or greater. */
dlg.setOnShowListener(new OnShowListener()
{
@Override
public void onShow(final DialogInterface dialog)
{
input.requestFocus();
((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(input, 0);
}
});
Run Code Online (Sandbox Code Playgroud)
干得好......我猜.现在我有这个专注的输入,如果它尊重输入IME选项会很好...
AlertDialog专注EditText于自定义IME选项
input.setImeOptions(EditorInfo.IME_ACTION_DONE);
input.setOnEditorActionListener(new OnEditorActionListener()
{
@Override
public boolean onEditorAction(final TextView v, final int actionId, final KeyEvent event)
{
/** Same code here that goes in the dialog.setPositiveButton OnClickListener */
dlg.dismiss();
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
现在,这真的不是一个很好的解决方案(重复代码),但它的工作原理......
人们有更好的方法来解决这个问题,或者在对话框中询问用户提供一小段信息真的很少见,或者我只是一个喝酒者,应该去写我自己的对话框?
根据对OP的评论:
您不必拥有此类重复代码OnEditorActionListener.您可以告诉操作系统在激活时单击"确定"按钮,而不是重复代码.
像这样的东西:
public boolean onEditorAction(final TextView v, final int actionId, final KeyEvent event) {
dlg.getButton(DialogInterface.BUTTON_POSITIVE).performClick(); // Click OK button
return true;
}
Run Code Online (Sandbox Code Playgroud)
总的来说,我会说你正在采取正确的方法(关于通过对话收集信息的文档).正如我在评论中提到的,操作系统使用AlertDialogw/EditText来添加字典单词(到用户字典),因此这是操作系统中的预期功能.
| 归档时间: |
|
| 查看次数: |
1896 次 |
| 最近记录: |