Cara membuat kotak edittext dalam dialog


211

Saya mencoba membuat kotak edittext di kotak dialog untuk memasukkan kata sandi. dan ketika saya melakukan saya tidak bisa melakukan. Saya seorang pemula di dalamnya. Tolong bantu saya dalam hal ini.

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();
        }

    }); 

Gambar

masukkan deskripsi gambar di sini

Saya ingin mendapatkan

masukkan deskripsi gambar di sini

 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();
 }

 });

1
periksa developer.android.com/guide/topics/ui/notifiers/toasts.html ini . periksa posisi pemanggang roti. Tapi saya kira lebih baik untuk seterror untuk edittext
Raghunandan

Jawaban:


171

Gunakan Konteks Aktivitas

Ganti ini

  final EditText input = new EditText(this);

Oleh

  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

1
@Abhishek mana inisialisasi Anda. Seperti Dialog dialog = new Dialog(MainActivity.this). Saya pikir Anda menyalin kode Anda dari tempat lain di mana saya kira
Raghunandan

1
@Abhishek maaf kebingungan saya mengira Anda memiliki dialog khusus. public void onClick(DialogInterface dialogitu dialoginterface. menggunakan itu bukan masalah, Anda mengklik tombol negatif untuk mengabaikan alertdialog.
Raghunandan

1
@Abhishek menampilkan pesan roti atau set kesalahan untuk edittext. stackoverflow.com/questions/7747268/…
Raghunandan

1
Toast toast = Toast.makeText (MainActivity.this, "Silakan Masukkan Kata Sandi!", Toast.LENGTH_LONG); toast.setGravity (Gravity.CENTER, 0, 0); bersulang.show (); ini berhasil bagi saya untuk mendapatkan roti panggang di tengah.
Abb

5
Hai Raghu, Jika saya ingin menempatkan margin kiri & margin kanan ke kotak edittext ini, lalu apa yang harus saya tulis? Saya mencoba banyak jawaban, untuk mengatur margin secara program, tetapi tidak ada yang berhasil :(
Lucifer

287

Saya tahu sudah terlambat untuk menjawab pertanyaan ini, tetapi bagi orang lain yang mencari sesuatu yang mirip dengan ini di sini adalah kode sederhana kotak peringatan dengan edittext

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

atau

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

jika Anda ingin mengubah tema dialog.

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();

Di mana saya harus meletakkan kode ini? Ketika saya mencoba ini dalam metode, dan EditText bidang terakhir ditempatkan di atas kelas, itu crash.
cerbin

apa kecelakaannya?
Syeda Zunaira

10
Bagaimana cara memberi margin pada EditText ini?
Ghanshyam Nayma

1
Saran bagus untuk topik yang ditanyakan, tetapi komentar gaya diperlukan. Android bukan Windows, dan tidak perlu tombol batal seperti itu adalah keharusan di Win32, ada tombol "Kembali" OS yang berfungsi sebagai Batal / Tidak. Jadi saran saya adalah melompati tombol negatif pada dialog permintaan kata sandi, dan tombol positif tidak boleh "Ya" tetapi harus "OK" (dan mendapatkannya dilokalkan dengan menggunakan android.R.string.ok). Lihat lebih banyak di jawaban saya di topik stackoverflow.com/questions/11459827/… .
Jan Bergström

2
Bidang edit juga harus berupa satu liner (edittext.setSingleLine ();) dalam permintaan kata sandi (karena memang demikian) dan itu membuat menekan enter pada keyboard fisik (BT) yang terlampir (atau Chromebook) membuat fokus beralih ke item berikutnya, tombol positif. artinya setelah memasukkan teks, mendorong masuk dua kali dialog secara positif berakhir.
Jan Bergström

36

Yang paling sederhana dari semuanya.

  • Buat file layout xml untuk dialog. Tambahkan tampilan apa pun yang Anda inginkan seperti EditText, ListView, Spinner dll.

    Kembangkan tampilan ini dan atur ini ke AlertDialog

Mari kita mulai dengan file Layout terlebih dahulu.

<?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();

3
Kamu pahlawan sekali.
AdamMcquiff

Saya crash. Saya menemukan alasan saya jatuh karena saya melewatkan 'tampilan' pada findViewById. Sekarang saya hanya perlu tahu cara menangani kotak centang sehingga saya dapat menampilkan atau menyembunyikan kata sandi SAAT dialog masih hidup. Mencoba pendekatan multi item tetapi menambahkan kotak centang sendiri di samping yang ada di tata letak saya!
Brian Reinhold

24

Versi sederhana

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;

12

Coba kode di bawah ini:

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);

5

Mengatur margin dalam tata letak params tidak akan berfungsi di Alertdialog. Anda harus mengatur padding di tata letak induk dan kemudian menambahkan edittext di tata letak itu.

Ini adalah kode kotlin kerja saya ...

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()

4

Anda juga dapat membuat dialog lansiran khusus dengan membuat file xml.

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" />

Kode Java:

@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;
   }
}

ini adalah apa yang saya butuhkan tetapi bagaimana saya bisa menggunakan ini dalam fragmen yang menunjukkan kesalahan
Raju

0

Jawaban Wasim membawa saya ke arah yang benar, tetapi saya harus membuat beberapa perubahan untuk membuatnya bekerja untuk proyek saya saat ini. Saya menggunakan fungsi ini dalam sebuah fragmen dan menyebutnya pada klik tombol.

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()
    }

Saya harap ini membantu orang lain dalam waktu dekat. Selamat coding!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.