Cách tạo hộp edittext trong hộp thoại


211

Tôi đang cố gắng tạo một hộp edittext trong hộp thoại để nhập mật khẩu. và khi tôi đang làm tôi không thể làm được. Tôi là người mới bắt đầu trong nó. Xin hãy giúp tôi trong việc này.

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

    }); 

Hình ảnh

nhập mô tả hình ảnh ở đây

Tôi muốn có được như

nhập mô tả hình ảnh ở đây

 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
kiểm tra nhà phát triển này.android.com/guide/topics/ui/notifier/toasts.html . kiểm tra vị trí bánh mì nướng. Nhưng tôi đoán tốt hơn là nên thiết lập trình giới thiệu cho edittext
Raghunandan

Câu trả lời:


171

Sử dụng bối cảnh Activtiy

Thay thế cái này

  final EditText input = new EditText(this);

Bởi

  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 là nơi khởi tạo của bạn. Thích Dialog dialog = new Dialog(MainActivity.this). Tôi nghĩ rằng bạn đã sao chép mã của mình từ nơi khác mà tôi đoán
Raghunandan

1
@ Abhishek xin lỗi sự nhầm lẫn của tôi nó nghĩ rằng bạn có hộp thoại tùy chỉnh. public void onClick(DialogInterface dialogđó là hộp thoại. sử dụng đó không phải là vấn đề bạn nhấp vào nút phủ định để loại bỏ alertdialog.
Raghunandan

1
@Abhishek hiển thị thông báo bánh mì nướng hoặc đặt lỗi cho edittext. stackoverflow.com/questions/7747268/
Mạnh

1
Toast Toast = Toast.makeText (MainActivity.this, "Vui lòng nhập mật khẩu!", Toast.LENGTH_LONG); toast.setGravity (Gravity.CENTER, 0, 0); bánh mì nướng.show (); điều này làm việc cho tôi để có được bánh mì nướng ở trung tâm.
Abb

5
Xin chào Raghu, nếu tôi muốn đặt lề trái & lề phải vào hộp edittext này thì tôi nên viết gì? Tôi đã thử nhiều câu trả lời, để đặt lề theo chương trình, nhưng không có gì hiệu quả :(
Lucifer

287

Tôi biết đã quá muộn để trả lời câu hỏi này nhưng đối với những người khác đang tìm kiếm một thứ tương tự như ở đây thì đây là một mã đơn giản của một hộp thông báo với một edittext

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

hoặc là

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

nếu bạn muốn thay đổi chủ đề của hộp thoại.

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

Tôi nên đặt mã này ở đâu? Khi tôi đã thử điều này trong phương thức và trường cuối cùng EditText được đặt trên đầu lớp, nó gặp sự cố.
cerbin

sự cố là gì
Syeda Zunaira

10
Làm thế nào để cung cấp lề cho EditText này?
Ghanshyam Nayma

1
Đề nghị tốt của chủ đề được hỏi, nhưng một bình luận phong cách là cần thiết. Android không phải là Windows và không cần có nút hủy như trong Win32, có nút "Quay lại" của hệ điều hành đóng vai trò Hủy / Không. Vì vậy, đề xuất của tôi là bỏ qua nút phủ định trên hộp thoại yêu cầu mật khẩu và nút tích cực không nên là "Có" mà nên là "OK" (và làm cho nó được bản địa hóa bằng cách sử dụng android.R.opes.ok). Xem thêm trong câu trả lời của tôi trên stackoverflow.com/questions/11459827/ chủ đề.
Jan Bergström

2
Trường chỉnh sửa cũng phải là một lớp lót (edittext.setSingleLine ();) trong yêu cầu mật khẩu (vì nó) và điều đó khiến việc nhấn enter trên bàn phím vật lý (BT) được đính kèm (hoặc Chromebook) làm cho tiêu điểm nhảy đến mục tiếp theo, nút tích cực. có nghĩa là sau khi nhập văn bản, đẩy hai lần đối thoại được kết thúc tích cực.
Jan Bergström

36

Đơn giản nhất trong tất cả sẽ là.

  • Tạo tập tin bố trí xml cho hộp thoại. Thêm bất cứ chế độ xem nào bạn muốn như EditText, ListView, Spinner, v.v.

    Thổi phồng khung nhìn này và đặt nó thành AlertDialog

Trước tiên hãy bắt đầu với tệp Bố cục.

<?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
Thật là một anh hùng.
AdamMcquiff

Tôi gặp nạn. Tôi tìm thấy lý do tôi gặp sự cố là tôi đã bỏ lỡ 'lượt xem' trên findViewById. Bây giờ tôi chỉ cần biết cách xử lý một hộp kiểm để tôi có thể hiển thị hoặc ẩn mật khẩu KHI hộp thoại vẫn còn sống. Đã thử cách tiếp cận đa mục nhưng nó đã thêm hộp kiểm riêng của mình cùng với hộp kiểm trong bố cục của tôi!
Brian Reinhold

23

Phiên bản đơn giản hóa

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

Hãy thử mã dưới đây:

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

Đặt lề trong thông số bố trí sẽ không hoạt động trong Alertdialog. bạn phải đặt phần đệm trong bố trí cha mẹ và sau đó thêm edittext trong bố cục đó.

Đây là mã kotlin hoạt động của tôi ...

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

Bạn cũng có thể tạo hộp thoại cảnh báo tùy chỉnh bằng cách tạo tệp xml.

hộp thoại

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

Mã 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;
   }
}

đây là những gì tôi cần nhưng làm thế nào tôi có thể sử dụng nó trong đoạn bị lỗi hiển thị
Raju

0

Câu trả lời của Wasim đưa tôi đi đúng hướng nhưng tôi đã phải thực hiện một số thay đổi để làm cho nó hoạt động cho dự án hiện tại của tôi. Tôi đang sử dụng chức năng này trong một đoạn và gọi nó vào nút bấm.

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

Tôi hy vọng nó sẽ giúp người khác trong tương lai gần. Chúc mừng mã hóa!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.