Bir iletişim kutusunda düzenleme metni kutusu oluşturma


211

Bir şifre girmek için bir iletişim kutusunda bir edittext kutusu yapmaya çalışıyorum. ve yaptığım zaman yapamıyorum. Ben de acemiyim. Lütfen bu konuda bana yardım et.

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

    }); 

görüntü

resim açıklamasını buraya girin

Olarak almak istiyorum

resim açıklamasını buraya girin

 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
bu developer.android.com/guide/topics/ui/notifiers/toasts.html adresini kontrol edin . konumlandırma tostlarını kontrol edin. Ama sanırım edittext için seterror
Raghunandan

Yanıtlar:


171

Etkin Bağlam Kullan

Bunu değiştir

  final EditText input = new EditText(this);

Tarafından

  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 başlatmanız nerede? Gibi Dialog dialog = new Dialog(MainActivity.this). Sanırım
kodumu

1
@Ahtah, üzgünüm, özel diyaloğunuz olduğunu düşündü. public void onClick(DialogInterface dialogbu dialoginterface. bu bir sorun değildir alertdialog kapatmak için negatif düğmesine tıklayın.
Raghunandan

1
@Abhishek bir tost mesajı görüntüler veya düzenleme metni için hata ayarlar. stackoverflow.com/questions/7747268/…
Raghunandan

1
Toast toast = Toast.makeText (MainActivity.this, "Lütfen Şifre Girin!", Toast.LENGTH_LONG); tost.set yerçekimi (Gravity.CENTER, 0, 0); ) (toast.show; bu benim için tost almak için çalıştı.
Abb

5
Merhaba Raghu, Bu edittext kutusuna sol kenar boşluğu ve sağ kenar boşluğu koymak istersem ne yazmalıyım? Programsal olarak marj ayarlamak için birçok cevap denedim, ancak hiçbir şey işe yaramadı :(
Lucifer

287

Bu soruyu cevaplamak için çok geç olduğunu biliyorum ama buna benzer bir şey arayan diğerleri için burada bir edittext ile bir uyarı kutusunun basit bir kodu

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

veya

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

iletişim kutusunun temasını değiştirmek istiyorsanız.

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

Bu kodu nereye yerleştirmeliyim? Bu yöntemde denedim ve EditText sınıfın üstüne yerleştirilen son alan, çöküyor.
cerbin

kaza nedir?
Syeda Zunaira

10
Bu EditText'e marj nasıl verilir?
Ghanshyam Nayma

1
Sorulan konunun iyi bir öneri, ancak bir stil yorumu gereklidir. Android Windows değildir ve Win32'de bir zorunluluk gibi bir iptal düğmesine gerek yoktur, İptal / Hayır olarak hizmet veren OS "Geri" düğmesi vardır. Bu yüzden önerim, bir şifre isteği iletişim kutusundaki negatif düğmeyi atlamak ve pozitif düğme "Evet" olmamalı, ancak "Tamam" olmalıdır (ve android.R.string.ok kullanarak yerelleştirilmelidir). Daha fazla bilgi için stackoverflow.com/questions/11459827/… konusuna bakın.
Jan Bergström

2
Düzenleme alanı ayrıca bir parola isteğinde (olduğu için) bir astar (edittext.setSingleLine ();) olmalıdır ve bu, bağlı fiziksel (BT) klavyede (veya Chromebook) enter tuşuna basmayı odak noktasına sonraki öğe, pozitif düğme. yani metne girdikten sonra, enter tuşuna iki kez basıldığında diyalog olumlu bir şekilde sonlandırılır.
Jan Bergström

36

En basit olanı olurdu.

  • İletişim için xml mizanpaj dosyası oluşturun. EditText, ListView, Spinner gibi istediğiniz görünümü ekleyin.

    Bu görünümü şişir ve bunu AlertDialog olarak ayarla

Önce Layout dosyasıyla başlayalım.

<?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
Ne kahramansın.
AdamMcquiff

Ben çarpıyorum. Ben çöktü nedeni buldum findViewById 'görünümü' kaçırdı. Şimdi sadece bir onay kutusunun nasıl işleneceğini bilmem gerekiyor, böylece iletişim kutusu hala canlıyken şifreyi gösterebilir veya gizleyebilirim. Çok öğeli yaklaşımı denedim, ancak düzenimdekine ek olarak kendi onay kutusunu da ekledi!
Brian Reinhold

23

Basitleştirilmiş sürüm

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

Aşağıdaki kodu deneyin:

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

Düzen parametrelerinde kenar boşluğu ayarlamak Alertdialog'da çalışmaz. doldurmayı üst düzende ayarlamanız ve ardından bu düzende düzenleme metni eklemeniz gerekir.

Bu benim çalışan kotlin kodum ...

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

Bir xml dosyası oluşturarak özel uyarı iletişim kutusu da oluşturabilirsiniz.

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

Java Kodu:

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

Bu ihtiyacım olan şey ama nasıl bunu onun parçalanma hatası kullanabilirsiniz
Raju

0

Wasim'in cevabı beni doğru yöne götürdü, ancak mevcut projemde çalışmasını sağlamak için bazı değişiklikler yapmak zorunda kaldım. Bu işlevi bir parçada kullanıyorum ve düğme tıklatıldığında çağırıyorum.

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

Umarım yakın gelecekte başka birine yardımcı olur. Mutlu kodlama!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.