239 votes

Comment créer une boîte d'édition dans une boîte de dialogue ?

J'essaie de créer une boîte d'édition dans une boîte de dialogue pour saisir un mot de passe. Je n'arrive pas à le faire. Je suis un débutant dans ce domaine. Veuillez m'aider à le faire.

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

    }); 

Image

enter image description here

Je veux être aussi

enter image description here

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

 });

10voto

Wasim K. Memon Points 3254

La définition de la marge dans les paramètres de mise en page ne fonctionnera pas dans Alertdialog. Vous devez définir le rembourrage dans la mise en page parent et ensuite ajouter le texte d'édition dans cette mise en page.

Voici mon code kotlin fonctionnel...

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

4voto

Shadow Points 3217

Vous pouvez également créer un dialogue d'alerte personnalisé en créant un fichier 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" />

Le code 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;
   }
}

1voto

La réponse de Wasim m'a conduit dans la bonne direction mais j'ai dû faire quelques changements pour que cela fonctionne pour mon projet actuel. J'utilise cette fonction dans un fragment et je l'appelle au moment du clic sur le bouton.

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

J'espère que cela aidera quelqu'un d'autre dans un avenir proche. Bon codage !

0voto

Kumar Santanu Points 21

Vous pouvez essayer le code ci-dessous

I created a Method like this

 public void getReferDialog(OnSubmitBtnClick submitBtnClick) {
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(activity);
    final View customLayout = activity.getLayoutInflater().inflate(R.layout.dilog_refer_id, null);
    alertDialog.setView(customLayout);
    AlertDialog alert = alertDialog.create();
    alert.setCancelable(false);
    alert.setCanceledOnTouchOutside(false);
    EditText editText = customLayout.findViewById(R.id.ed_refer_user_input);
    Button submitBtn = customLayout.findViewById(R.id.btn_refer_submit);
    TextView tvNo = customLayout.findViewById(R.id.tv_no_thanks);
    TextView tvBody = customLayout.findViewById(R.id.tv_title_refer_dialog_body);

    submitBtn.setOnClickListener(v -> {
        String userText = editText.getText().toString();
        if (!userText.equals("")) {
            alert.dismiss();
            submitBtnClick.onClick(userText);
        }else {
            tvBody.setTextColor(Color.RED);
        }
    });

    tvNo.setOnClickListener(v -> {
        alert.dismiss();
        submitBtnClick.onClick("skip");
    });
    alert.show();
}

_Here is my dilog_refer_id.xml file_

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/white"
    android:paddingTop="24dp"
    android:paddingStart="24dp"
    android:paddingEnd="24dp"
    android:paddingBottom="14dp">

    <TextView
        android:id="@+id/tv_title_refer_dialog_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="10dp"
        android:fontFamily="@font/segoe_ui_bold"
        android:gravity="start"
        android:text="@string/refer_by_dialog_title"
        android:textColor="@color/colorPrimary"
        android:textSize="18sp" />

    <TextView
        android:id="@+id/tv_title_refer_dialog_body"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/tv_title_refer_dialog_title"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="10dp"
        android:fontFamily="@font/segoe_ui_regular"
        android:gravity="start"
        android:text="@string/refer_by_dialog_body"
        android:textColor="@color/colorPrimary"
        android:textSize="14sp" />

    <EditText
        android:id="@+id/ed_refer_user_input"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/tv_title_refer_dialog_body"
        android:layout_marginTop="10dp"
        android:autofillHints="FDCT4G"
        android:background="@drawable/bg_edit_text_refer"
        android:fontFamily="@font/seg_ui_semibold"
        android:hint="@string/dialog_refer_by"
        android:inputType="textCapCharacters"
        android:minHeight="48dp"
        android:padding="10dp"
        android:textColor="@color/colorPrimary"
        android:textColorHint="@color/colorPrimary"
        android:textSize="14sp" />

    <Button
        android:id="@+id/btn_refer_submit"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_below="@+id/ed_refer_user_input"
        android:layout_centerHorizontal="true"
        android:layout_margin="16dp"
        android:background="@drawable/btn_bg"
        android:text="@string/submit"
        android:textColor="@color/textPrimaryColor" />

    <TextView
        android:id="@+id/tv_no_thanks"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/btn_refer_submit"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="10dp"
        android:fontFamily="@font/segoe_ui_bold"
        android:gravity="center"
        android:text="@string/skip"
        android:padding="10dp"
        android:textColor="@color/drawer_item"
        android:textSize="14sp" />
</RelativeLayout>

_My bg_edit_text_refer.xml(drawable) file_

    <?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle" xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/home_bg_extension"/>
    <corners android:radius="15dp"/>
</shape>

Creating a Interface for get user input data

public interface OnSubmitBtnClick {
    void onClick(String referId);
}

Finally all done now time to call it onclick method

showPopupBtn.setOnClickListener(v -> {
        getReferDialog(new OnSubmitBtnClick() {
            @Override
            public void onClick(String referId) {
                Toast.makeText(LoginActivity.this, referId, Toast.LENGTH_SHORT).show();
            }
        });
    });

Merci, bon codage !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X