input文本对话框Android
当用户单击我的应用程序中的Button
(打印在SurfaceView
)时,我想要一个文本Dialog
出现,我想将结果存储在一个String
。 我希望文本Dialog
覆盖当前屏幕。 我怎样才能做到这一点?
听起来像是一个使用AlertDialog的好机会。
基本上看起来,Android没有内置对话框来执行此操作(据我所知)。 幸运的是,在创build一个标准的AlertDialog之前,这只是一些额外的工作。 您只需要为用户创build一个EditText来input数据,并将其设置为AlertDialog的视图。 如果需要,可以使用setInputType自定义允许的inputtypes。
如果你能够使用一个成员variables,你可以简单地将variables设置为EditText的值,并且在对话框closures之后它将保持不变。 如果您不能使用成员variables,则可能需要使用侦听器将string值发送到正确的位置。 (如果这是你需要的,我可以编辑和详细说明)。
在你的class级里:
private String m_Text = "";
在你的button的OnClickListener中(或从那里调用的函数中):
AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Title"); // Set up the input final EditText input = new EditText(this); // Specify the type of input expected; this, for example, sets the input as a password, and will mask the text input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); builder.setView(input); // Set up the buttons builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { m_Text = input.getText().toString(); } }); builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); builder.show();
这个例子呢? 看起来很简单。
final EditText txtUrl = new EditText(this); // Set the default text to a link of the Queen txtUrl.setHint("http://www.librarising.com/astrology/celebs/images2/QR/queenelizabethii.jpg"); new AlertDialog.Builder(this) .setTitle("Moustachify Link") .setMessage("Paste in the link of an image to moustachify!") .setView(txtUrl) .setPositiveButton("Moustachify", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { String url = txtUrl.getText().toString(); moustachify(null, url); } }) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { } }) .show();
我将更新@Aaron更新的方法,这将使您有机会以更好的方式对话。 这里是调整的例子:
AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); builder.setTitle("Title"); // I'm using fragment here so I'm using getView() to provide ViewGroup // but you can provide here any other instance of ViewGroup from your Fragment / Activity View viewInflated = LayoutInflater.from(getContext()).inflate(R.layout.text_inpu_password, (ViewGroup) getView(), false); // Set up the input final EditText input = (EditText) viewInflated.findViewById(R.id.input); // Specify the type of input expected; this, for example, sets the input as a password, and will mask the text builder.setView(viewInflated); // Set up the buttons builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); m_Text = input.getText().toString(); } }); builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); builder.show();
以下是用于创buildEditText对话框的布局示例:
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="@dimen/content_padding_normal"> <android.support.design.widget.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <AutoCompleteTextView android:id="@+id/input" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/hint_password" android:imeOptions="actionDone" android:inputType="textPassword" /> </android.support.design.widget.TextInputLayout> </FrameLayout>
在这里你可以find结果: