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结果:

EditText对话框的例子