So erstellen Sie ein Edittext-Feld in einem Dialogfeld

211

Ich versuche, ein Edittext-Feld in einem Dialogfeld zur Eingabe eines Passworts zu erstellen. und wenn ich es tue, kann ich es nicht tun. Ich bin ein Anfänger darin. Bitte helfen Sie mir dabei.

public class MainActivity extends Activity {

Button create, show, setting;
//String pass="admin";String password;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    create = (Button)findViewById(R.id.amcreate);
    setting = (Button)findViewById(R.id.amsetting);
    show = (Button)findViewById(R.id.amshow);
    //input = (EditText)findViewById(R.id.this);

    setting.setVisibility(View.INVISIBLE);

    create.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            Intent myIntent1 = new Intent(view.getContext(), Create.class);
            startActivityForResult(myIntent1, 0);
        }

    });

    show.setOnClickListener(new View.OnClickListener() {
        //@SuppressWarnings("deprecation")
        public void onClick(final View view) {

            // Creating alert Dialog with one Button
            AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this);

            //AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();

            // Setting Dialog Title
            alertDialog.setTitle("PASSWORD");

            // Setting Dialog Message
            alertDialog.setMessage("Enter Password");
            **final EditText input = new EditText(this);**
            //alertDialog.setView(input);

            // Setting Icon to Dialog
            alertDialog.setIcon(R.drawable.key);

            // Setting Positive "Yes" Button
            alertDialog.setPositiveButton("YES",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,int which) {
                            // Write your code here to execute after dialog
                            Toast.makeText(getApplicationContext(),"Password Matched", Toast.LENGTH_SHORT).show();
                            Intent myIntent1 = new Intent(view.getContext(), Show.class);
                            startActivityForResult(myIntent1, 0);
                        }
                    });
            // Setting Negative "NO" Button
            alertDialog.setNegativeButton("NO",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            // Write your code here to execute after dialog
                            dialog.cancel();
                        }
                    });

            // closed

            // Showing Alert Message
            alertDialog.show();
        }

    }); 

Bild

Geben Sie hier die Bildbeschreibung ein

Ich möchte als bekommen

Geben Sie hier die Bildbeschreibung ein

 AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this);
 alertDialog.setTitle("PASSWORD");
 alertDialog.setMessage("Enter Password");

 final EditText input = new EditText(MainActivity.this);
 LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
     LinearLayout.LayoutParams.MATCH_PARENT,
     LinearLayout.LayoutParams.MATCH_PARENT);
 input.setLayoutParams(lp);
 alertDialog.setView(input);
 alertDialog.setIcon(R.drawable.key);

 alertDialog.setPositiveButton("YES",
     new DialogInterface.OnClickListener() {
         public void onClick(DialogInterface dialog, int which) {
             password = input.getText().toString();
             if (password.compareTo("") == 0) {
                 if (pass.equals(password)) {
                     Toast.makeText(getApplicationContext(),
                         "Password Matched", Toast.LENGTH_SHORT).show();
                     Intent myIntent1 = new Intent(view.getContext(),
                         Show.class);
                     startActivityForResult(myIntent1, 0);
                 } else {
                     Toast.makeText(getApplicationContext(),
                         "Wrong Password!", Toast.LENGTH_SHORT).show();
                 }
             }
         }
     });

 alertDialog.setNegativeButton("NO",
     new DialogInterface.OnClickListener() {
         public void onClick(DialogInterface dialog, int which) {
             dialog.cancel();
         }
     });

 alertDialog.show();
 }

 });
Abb
quelle
1
Überprüfen Sie diese developer.android.com/guide/topics/ui/notifiers/toasts.html . Positionieren Sie die Toasts. Aber ich denke, es ist besser, für edittext
Raghunandan

Antworten:

171

Verwenden Sie den Aktivitätskontext

Ersetzen Sie dies

  final EditText input = new EditText(this);

Durch

  final EditText input = new EditText(MainActivity.this);  
  LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.MATCH_PARENT,
                        LinearLayout.LayoutParams.MATCH_PARENT);
  input.setLayoutParams(lp);
  alertDialog.setView(input); // uncomment this line
Raghunandan
quelle
1
@Abhishek wo ist deine Initialisierung. Wie Dialog dialog = new Dialog(MainActivity.this). Ich denke, Sie haben Ihren Code von einem anderen Ort kopiert
Raghunandan
1
@Abhishek Entschuldigung, meine Verwirrung, es dachte, Sie hätten einen benutzerdefinierten Dialog. public void onClick(DialogInterface dialogEs ist die Dialogschnittstelle. Wenn dies kein Problem ist, klicken Sie auf die negative Schaltfläche, um den Alarmdialog zu schließen.
Raghunandan
1
@Abhishek zeigt eine Toastnachricht an oder setzt einen Fehler für edittext. stackoverflow.com/questions/7747268/…
Raghunandan
1
Toast toast = Toast.makeText (MainActivity.this, "Bitte Passwort eingeben!", Toast.LENGTH_LONG); toast.setGravity (Gravity.CENTER, 0, 0); toast.show (); Das hat bei mir funktioniert, um den Toast in die Mitte zu bekommen.
Abb
5
Hallo Raghu, wenn ich diesem Edittext-Feld einen linken und einen rechten Rand hinzufügen möchte, was soll ich dann schreiben? Ich habe viele Antworten versucht, um den Spielraum programmgesteuert
Lucifer
287

Ich weiß, dass es zu spät ist, um diese Frage zu beantworten, aber für andere, die nach etwas Ähnlichem suchen, ist hier ein einfacher Code einer Alertbox mit einem Edittext

AlertDialog.Builder alert = new AlertDialog.Builder(this); 

oder

new AlertDialog.Builder(mContext, R.style.MyCustomDialogTheme);

Wenn Sie das Thema des Dialogfelds ändern möchten.

final EditText edittext = new EditText(ActivityContext);
alert.setMessage("Enter Your Message");
alert.setTitle("Enter Your Title");

alert.setView(edittext);

alert.setPositiveButton("Yes Option", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
        //What ever you want to do with the value
        Editable YouEditTextValue = edittext.getText();
        //OR
        String YouEditTextValue = edittext.getText().toString();
    }
});

alert.setNegativeButton("No Option", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
        // what ever you want to do with No option.
    }
});

alert.show();
Syeda Zunaira
quelle
Wo soll ich diesen Code platzieren? Als ich dies in der Methode versuchte und das letzte Feld EditText über der Klasse platzierte, stürzte es ab.
Cerbin
Was ist der Absturz?
Syeda Zunaira
10
Wie kann ich diesem EditText einen Rand geben?
Ghanshyam Nayma
1
Guter Vorschlag für das gestellte Thema, aber ein Stilkommentar ist erforderlich. Android ist nicht Windows, und es ist keine Abbrechen-Schaltfläche erforderlich, wie dies in Win32 erforderlich ist. Es gibt die Schaltfläche "Zurück" des Betriebssystems, die als Abbrechen / Nein dient. Mein Vorschlag ist also, die negative Schaltfläche in einem Passwortanforderungsdialog zu überspringen, und die positive Schaltfläche sollte nicht "Ja", sondern "OK" sein (und mithilfe von android.R.string.ok lokalisiert werden). Weitere Informationen finden Sie in meiner Antwort zum Thema stackoverflow.com/questions/11459827/… .
Jan Bergström
2
Das Bearbeitungsfeld sollte auch ein Einzeiler (edittext.setSingleLine ();) in einer Kennwortanforderung sein (weil dies der Fall ist). Dadurch wird die Eingabetaste auf einer angeschlossenen physischen Tastatur (BT) (oder einem Chromebook) gedrückt, sodass der Fokus auf das Feld springt nächster Punkt, die positive Taste. Dies bedeutet, dass der Dialog nach zweimaliger Eingabe des Textes positiv beendet wird.
Jan Bergström
36

Am einfachsten wäre es.

  • Erstellen Sie eine XML-Layoutdatei für den Dialog. Fügen Sie eine beliebige Ansicht wie EditText, ListView, Spinner usw. hinzu.

    Blasen Sie diese Ansicht auf und setzen Sie sie auf AlertDialog

Beginnen wir zuerst mit der Layoutdatei.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical">


    <EditText
        android:id="@+id/etComments"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="top"
        android:hint="Enter comments(Optional)"
        android:inputType="textMultiLine"
        android:lines="8"
        android:maxLines="3"
        android:minLines="6"
        android:scrollbars="vertical" />

</LinearLayout>

final View view = layoutInflater.inflate(R.layout.xml_file_created_above, null);
AlertDialog alertDialog = new AlertDialog.Builder(ct).create();
alertDialog.setTitle("Your Title Here");
alertDialog.setIcon("Icon id here");
alertDialog.setCancelable(false);
Constant.alertDialog.setMessage("Your Message Here");


final EditText etComments = (EditText) view.findViewById(R.id.etComments);

alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "OK", new OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {

    }
});


alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "Cancel", new OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        alertDialog.dismiss()
    }
});


alertDialog.setView(view);
alertDialog.show();
Balwinder SIngh
quelle
3
Was für ein Held du bist.
AdamMcquiff
Ich stürze ab. Ich habe festgestellt, dass ich abgestürzt bin, weil ich die 'Ansicht' auf der findViewById verpasst habe. Jetzt muss ich nur noch wissen, wie man mit einem Kontrollkästchen umgeht, damit ich das Passwort ein- oder ausblenden kann, solange der Dialog noch aktiv ist. Versuchte den Ansatz mit mehreren Elementen, fügte jedoch zusätzlich zu dem in meinem Layout ein eigenes Kontrollkästchen hinzu!
Brian Reinhold
23

Vereinfachte Version

final EditText taskEditText = new EditText(this);
AlertDialog dialog = new AlertDialog.Builder(this)
        .setTitle("Add a new task")
        .setMessage("What do you want to do next?")
        .setView(taskEditText)
        .setPositiveButton("Add", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                String task = String.valueOf(taskEditText.getText());
                SQLiteDatabase db = mHelper.getWritableDatabase();
                ContentValues values = new ContentValues();
                values.put(TaskContract.TaskEntry.COL_TASK_TITLE, task);
                db.insertWithOnConflict(TaskContract.TaskEntry.TABLE,
                        null,
                        values,
                        SQLiteDatabase.CONFLICT_REPLACE);
                db.close();
                updateUI();
            }
        })
        .setNegativeButton("Cancel", null)
        .create();
dialog.show();
return true;
Swarathesh Addanki
quelle
12

Versuchen Sie den folgenden Code:

alert.setTitle(R.string.WtsOnYourMind);

 final EditText input = new EditText(context);
 input.setHeight(100);
 input.setWidth(340);
 input.setGravity(Gravity.LEFT);

 input.setImeOptions(EditorInfo.IME_ACTION_DONE);
 alert.setView(input);
Pratik Dasa
quelle
5

Das Festlegen des Randes in Layoutparametern funktioniert in Alertdialog nicht. Sie müssen die Auffüllung im übergeordneten Layout festlegen und dann Edittext in diesem Layout hinzufügen.

Dies ist mein funktionierender Kotlin-Code ...

val alert =  AlertDialog.Builder(context!!)

val edittext = EditText(context!!)
edittext.hint = "Enter Name"
edittext.maxLines = 1

val layout = FrameLayout(context!!)

//set padding in parent layout
layout.setPaddingRelative(45,15,45,0)

alert.setTitle(title)

layout.addView(edittext)

alert.setView(layout)

alert.setPositiveButton(getString(R.string.label_save), DialogInterface.OnClickListener {

    dialog, which ->
    run {

        val qName = edittext.text.toString()

        Utility.hideKeyboard(context!!, dialogView!!)

    }

})
alert.setNegativeButton(getString(R.string.label_cancel), DialogInterface.OnClickListener {

            dialog, which ->
            run {
                dismiss()
            }

})

alert.show()
Wasim K. Memon
quelle
4

Sie können auch einen benutzerdefinierten Warndialog erstellen, indem Sie eine XML-Datei erstellen.

dialoglayout.xml

   <EditText
    android:id="@+id/dialog_txt_name"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    android:hint="Name"
    android:singleLine="true" >

    <requestFocus />
  </EditText>
   <Button
        android:id="@+id/btn_login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="60dp"
        android:background="@drawable/red"
        android:padding="5dp"
        android:textColor="#ffffff"
        android:text="Submit" />

    <Button
        android:id="@+id/btn_cancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_toRightOf="@+id/btn_login"
        android:background="@drawable/grey"
        android:padding="5dp"
        android:text="Cancel" />

Der Java-Code:

@Override//to popup alert dialog
public void onClick(View arg0) {
    // TODO Auto-generated method stub
    showDialog(DIALOG_LOGIN);
});


@Override
protected Dialog onCreateDialog(int id) {
    AlertDialog dialogDetails = null;

    switch (id) {
        case DIALOG_LOGIN:
            LayoutInflater inflater = LayoutInflater.from(this);
            View dialogview = inflater.inflate(R.layout.dialoglayout, null);
            AlertDialog.Builder dialogbuilder = new AlertDialog.Builder(this);
            dialogbuilder.setTitle("Title");
            dialogbuilder.setView(dialogview);
            dialogDetails = dialogbuilder.create();
            break;
    }
    return dialogDetails;
}

@Override
protected void onPrepareDialog(int id, Dialog dialog) {
    switch (id) {
        case DIALOG_LOGIN:
             final AlertDialog alertDialog = (AlertDialog) dialog;
             Button loginbutton = (Button) alertDialog
                .findViewById(R.id.btn_login);
             Button cancelbutton = (Button) alertDialog
                .findViewById(R.id.btn_cancel);
             userName = (EditText) alertDialog
                .findViewById(R.id.dialog_txt_name);
             loginbutton.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      String name = userName.getText().toString();
                      Toast.makeText(Activity.this, name,Toast.LENGTH_SHORT).show();
             });
             cancelbutton.setOnClickListener(new View.OnClickListener() {
                      @Override
                      public void onClick(View v) {
                           alertDialog.dismiss();
                      }
             });
             break;
   }
}
Schatten
quelle
Dies ist, was ich brauchte, aber wie kann ich dies in Fragment verwenden, es zeigt Fehler
Raju
0

Wasims Antwort führte mich in die richtige Richtung, aber ich musste einige Änderungen vornehmen, damit es für mein aktuelles Projekt funktioniert. Ich benutze diese Funktion in einem Fragment und rufe sie beim Klicken auf die Schaltfläche auf.

fun showPostDialog(title: String) {
        val alert =  AlertDialog.Builder(activity)

        val edittext = EditText(activity)
        edittext.hint = "Enter Name"
        edittext.maxLines = 1

        var layout = activity?.let { FrameLayout(it) }

        //set padding in parent layout
//        layout.isPaddingRelative(45,15,45,0)
        layout?.setPadding(45,15,45,0)

        alert.setTitle(title)

        layout?.addView(edittext)

        alert.setView(layout)

        alert.setPositiveButton(getString(R.string.label_save), DialogInterface.OnClickListener {

                dialog, which ->
            run {

                val qName = edittext.text.toString()

                showToast("Posted to leaderboard successfully")

                view?.hideKeyboard()

            }

        })
        alert.setNegativeButton(getString(R.string.label_cancel), DialogInterface.OnClickListener {

                dialog, which ->
            run {
                dialog.dismiss()
            }

        })

        alert.show()
    }

    fun View.hideKeyboard() {
        val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
        imm.hideSoftInputFromWindow(windowToken, 0)
    }

    fun showToast(message: String) {
        Toast.makeText(activity, message, Toast.LENGTH_LONG).show()
    }

Ich hoffe, es hilft in naher Zukunft jemand anderem. Viel Spaß beim Codieren!

thesamoanppprogrammer
quelle