How to add two edit text fields in an alert dialog

后端 未结 8 985
野趣味
野趣味 2020-12-07 16:28

I am trying to use an alert dialog to prompt for a username and a password in android. I have found this code here:

  if (token.equals(\"Not Found\"))
    {
         


        
相关标签:
8条回答
  • 2020-12-07 17:14
     LayoutInflater factory = LayoutInflater.from(this);
    final View textEntryView = factory.inflate(R.layout.text_entry, null);
    //text_entry is an Layout XML file containing two text field to display in alert dialog
    final EditText input1 = (EditText) textEntryView.findViewById(R.id.EditText1);
    final EditText input2 = (EditText) textEntryView.findViewById(R.id.EditText2);             
    input1.setText("DefaultValue", TextView.BufferType.EDITABLE);
    input2.setText("DefaultValue", TextView.BufferType.EDITABLE);
    final AlertDialog.Builder alert = new AlertDialog.Builder(this);
    
    alert.setIcon(R.drawable.icon)
         .setTitle("Enter the Text:")
         .setView(textEntryView)
         .setPositiveButton("Save", 
             new DialogInterface.OnClickListener() {
                 public void onClick(DialogInterface dialog, int whichButton) {
                        Log.i("AlertDialog","TextEntry 1 Entered "+input1.getText().toString());
                        Log.i("AlertDialog","TextEntry 2 Entered "+input2.getText().toString());
                        /* User clicked OK so do some stuff */
                 }
             })
         .setNegativeButton("Cancel",
             new DialogInterface.OnClickListener() {
                 public void onClick(DialogInterface dialog,
                        int whichButton) {
                 }
             });
    alert.show();
    
    0 讨论(0)
  • 2020-12-07 17:20

    Check the following code. It shows 2 edit text fields programmatically without any layout xml. Change 'this' to 'getActivity()' if you use it in a fragment.

    The tricky thing is we have to set the second text field's input type after creating alert dialog, otherwise, the second text field shows texts instead of dots.

        public void showInput() {
            OnFocusChangeListener onFocusChangeListener = new OnFocusChangeListener() {
                @Override
                public void onFocusChange(final View v, boolean hasFocus) {
                    if (hasFocus) {
                        // Must use message queue to show keyboard
                        v.post(new Runnable() {
                            @Override
                            public void run() {
                                InputMethodManager inputMethodManager= (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                                inputMethodManager.showSoftInput(v, 0);
                            }
                        });
                    }
                }
            };
    
            final EditText editTextName = new EditText(this);
            editTextName.setHint("Name");
            editTextName.setFocusable(true);
            editTextName.setClickable(true);
            editTextName.setFocusableInTouchMode(true);
            editTextName.setSelectAllOnFocus(true);
            editTextName.setSingleLine(true);
            editTextName.setImeOptions(EditorInfo.IME_ACTION_NEXT);
            editTextName.setOnFocusChangeListener(onFocusChangeListener);
    
            final EditText editTextPassword = new EditText(this);
            editTextPassword.setHint("Password");
            editTextPassword.setFocusable(true);
            editTextPassword.setClickable(true);
            editTextPassword.setFocusableInTouchMode(true);
            editTextPassword.setSelectAllOnFocus(true);
            editTextPassword.setSingleLine(true);
            editTextPassword.setImeOptions(EditorInfo.IME_ACTION_DONE);
            editTextPassword.setOnFocusChangeListener(onFocusChangeListener);
    
            LinearLayout linearLayout = new LinearLayout(this);
            linearLayout.setOrientation(LinearLayout.VERTICAL);
            linearLayout.addView(editTextName);
            linearLayout.addView(editTextPassword);
    
            DialogInterface.OnClickListener alertDialogClickListener = new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    switch (which){
                    case DialogInterface.BUTTON_POSITIVE:
                        // Done button clicked
                        break;
                    case DialogInterface.BUTTON_NEGATIVE:
                        // Cancel button clicked
                        break;
                    }
                }
            };
            final AlertDialog alertDialog = (new AlertDialog.Builder(this)).setMessage("Please enter name and password")
                    .setView(linearLayout)
                    .setPositiveButton("Done", alertDialogClickListener)
                    .setNegativeButton("Cancel", alertDialogClickListener)
                    .create();
    
            editTextName.setOnEditorActionListener(new OnEditorActionListener() {
                @Override
                public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                    editTextPassword.requestFocus(); // Press Return to focus next one
                    return false;
                }
            });
            editTextPassword.setOnEditorActionListener(new OnEditorActionListener() {
                @Override
                public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                    // Press Return to invoke positive button on alertDialog.
                    alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick();
                    return false;
                }
            });
    
            // Must set password mode after creating alert dialog.
            editTextPassword.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
            editTextPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());
            alertDialog.show();
        }
    
    0 讨论(0)
提交回复
热议问题