我想一個AlertDialog用一個EditText字段中它接受輸入。這本身非常簡單。但是,我希望有一些「明顯」的功能可以作爲此請求的後果。我會一一接受他們。我正在尋找任何能夠解決這些問題的人。我猜測解決方案是,「寫你自己的定製對話你懶惰的屁股。」一個AlertDialog更好的解決方案有一個EditText
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();
耶,偉大工程。如果輸入字段馬上聚焦(並顯示鍵盤),那肯定會很好,對吧?
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);
}
});
幹得好......我猜。現在,我有這樣的集中輸入它會是不錯的,如果它推崇的輸入IME選項...
AlertDialog
與自定義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;
}
});
集中EditText
現在,這真的不是一個偉大的溶液(重碼),但它的工作原理...
人究竟有沒有解決這個問題的一個更好的辦法,或者是不是真的那麼稀有詢問用戶的一小片的信息在一個對話框,還是我只是一個更好的人,應該去寫我自己的對話?
爲什麼不把所有的重複的代碼到像'setUpImeDialog(AlertDialog DLG,EditText上輸入){...}'的方法? – Eric
@Eric顯然你會。仍然不太理想,你必須聽完成(或其他)IME事件和點擊確定請求。 – xbakesx
是的,但您可以讓IME事件觸發點擊。像這樣:'dlg.getButton(DialogInterface.BUTTON_POSITIVE).performClick();'。這仍然是次要事件,但它避免了重複的代碼。 (如果這是你在找什麼,我可以將其添加爲一個答案。) – Eric