ventana studio personalizado full emergente ejemplo custom android android-dialog

studio - messagebox android



¿Cómo muestro un diálogo de alerta en Android? (24)

Quiero mostrar un cuadro de diálogo / ventana emergente con un mensaje para el usuario que muestra "¿Está seguro de que desea eliminar esta entrada?" con un botón que dice ''Eliminar''. Cuando se toca Delete , se debe eliminar esa entrada, de lo contrario nada.

He escrito un detector de clics para esos botones, pero ¿cómo invoco un cuadro de diálogo o ventana emergente y su funcionalidad?


En Kotlin

fun showDialog(@NonNull context: Context, @NonNull title: String, @NonNull msg: String, @NonNull positiveBtnText: String, @Nullable negativeBtnText: String?, @NonNull positiveBtnClickListener: DialogInterface.OnClickListener, @Nullable negativeBtnClickListener: DialogInterface.OnClickListener): AlertDialog { val builder = AlertDialog.Builder(context) .setTitle(title) .setMessage(msg) .setCancelable(true) .setPositiveButton(positiveBtnText, positiveBtnClickListener) if (negativeBtnText != null) builder.setNegativeButton(negativeBtnText, negativeBtnClickListener) val alert = builder.create() alert.show() return alert }

En java

public static AlertDialog showDialog(@NonNull Context context, @NonNull String title, @NonNull String msg, @NonNull String positiveBtnText, @Nullable String negativeBtnText, @NonNull DialogInterface.OnClickListener positiveBtnClickListener, @Nullable DialogInterface.OnClickListener negativeBtnClickListener) { AlertDialog.Builder builder = new AlertDialog.Builder(context) .setTitle(title) .setMessage(msg) .setCancelable(true) .setPositiveButton(positiveBtnText, positiveBtnClickListener); if (negativeBtnText != null) builder.setNegativeButton(negativeBtnText, negativeBtnClickListener); AlertDialog alert = builder.create(); alert.show(); return alert; }


El código que David Hedlund ha publicado me dio el error:

No se puede agregar la ventana: el token null no es válido

Si está obteniendo el mismo error, utilice el siguiente código. ¡¡Funciona!!

runOnUiThread(new Runnable() { @Override public void run() { if (!isFinishing()){ new AlertDialog.Builder(YourActivity.this) .setTitle("Your Alert") .setMessage("Your Message") .setCancelable(false) .setPositiveButton("ok", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // Whatever... } }).show(); } } });


Esta es una muestra básica de cómo crear un developer.android.com/guide/topics/ui/dialogs.html :

AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this); dialog.setCancelable(false); dialog.setTitle("Dialog on Android"); dialog.setMessage("Are you sure you want to delete this entry?" ); dialog.setPositiveButton("Delete", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { //Action for "Delete". } }) .setNegativeButton("Cancel ", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //Action for "Cancel". } }); final AlertDialog alert = dialog.create(); alert.show();


Esto es definitivamente ayuda para ti. Pruebe este código: al hacer clic en un botón, puede colocar uno, dos o tres botones con un cuadro de diálogo de alerta ...

SingleButtton.setOnClickListener(new View.OnClickListener() { public void onClick(View arg0) { // Creating alert Dialog with one Button AlertDialog alertDialog = new AlertDialog.Builder(AlertDialogActivity.this).create(); // Setting Dialog Title alertDialog.setTitle("Alert Dialog"); // Setting Dialog Message alertDialog.setMessage("Welcome to Android Application"); // Setting Icon to Dialog alertDialog.setIcon(R.drawable.tick); // Setting OK Button alertDialog.setButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int which) { // Write your code here to execute after dialog closed Toast.makeText(getApplicationContext(),"You clicked on OK", Toast.LENGTH_SHORT).show(); } }); // Showing Alert Message alertDialog.show(); } }); btnAlertTwoBtns.setOnClickListener(new View.OnClickListener() { public void onClick(View arg0) { // Creating alert Dialog with two Buttons AlertDialog.Builder alertDialog = new AlertDialog.Builder(AlertDialogActivity.this); // Setting Dialog Title alertDialog.setTitle("Confirm Delete..."); // Setting Dialog Message alertDialog.setMessage("Are you sure you want delete this?"); // Setting Icon to Dialog alertDialog.setIcon(R.drawable.delete); // 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(), "You clicked on YES", Toast.LENGTH_SHORT).show(); } }); // 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 Toast.makeText(getApplicationContext(), "You clicked on NO", Toast.LENGTH_SHORT).show(); dialog.cancel(); } }); // Showing Alert Message alertDialog.show(); } }); btnAlertThreeBtns.setOnClickListener(new View.OnClickListener() { public void onClick(View arg0) { // Creating alert Dialog with three Buttons AlertDialog.Builder alertDialog = new AlertDialog.Builder( AlertDialogActivity.this); // Setting Dialog Title alertDialog.setTitle("Save File..."); // Setting Dialog Message alertDialog.setMessage("Do you want to save this file?"); // Setting Icon to Dialog alertDialog.setIcon(R.drawable.save); // Setting Positive Yes Button alertDialog.setPositiveButton("YES", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // User pressed Cancel button. Write Logic Here Toast.makeText(getApplicationContext(), "You clicked on YES", Toast.LENGTH_SHORT).show(); } }); // Setting Negative No Button... Neutral means in between yes and cancel button alertDialog.setNeutralButton("NO", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // User pressed No button. Write Logic Here Toast.makeText(getApplicationContext(), "You clicked on NO", Toast.LENGTH_SHORT) .show(); } }); // Setting Positive "Cancel" Button alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // User pressed Cancel button. Write Logic Here Toast.makeText(getApplicationContext(), "You clicked on Cancel", Toast.LENGTH_SHORT).show(); } }); // Showing Alert Message alertDialog.show(); } });


He creado un cuadro de diálogo para preguntar a una persona si desea llamar a una persona o no.

import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; import android.widget.Toast; public class Firstclass extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.first); ImageView imageViewCall = (ImageView) findViewById(R.id.ring_mig); imageViewCall.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { try { showDialog("0728570527"); } catch (Exception e) { e.printStackTrace(); } } }); } public void showDialog(final String phone) throws Exception { AlertDialog.Builder builder = new AlertDialog.Builder(Firstclass.this); builder.setMessage("Ring: " + phone); builder.setPositiveButton("Ring", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent callIntent = new Intent(Intent.ACTION_DIAL);// (Intent.ACTION_CALL); callIntent.setData(Uri.parse("tel:" + phone)); startActivity(callIntent); dialog.dismiss(); } }); builder.setNegativeButton("Avbryt", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.show(); } }


Hoy en día es mejor usar DialogFragment en lugar de la creación directa de AlertDialog.

  • ¿Cómo? Consulte: https://.com/a/21032871/1390874
  • ¿Por qué? Consulte: https://.com/a/13765411/1390874

Me gustaría agregar una gran respuesta a David Hedlund al compartir un método más dinámico que el que publicó para que pueda usarse cuando tenga una acción negativa que realizar y cuando no lo haga, espero que sea de ayuda.

private void showAlertDialog(@NonNull Context context, @NonNull String alertDialogTitle, @NonNull String alertDialogMessage, @NonNull String positiveButtonText, @Nullable String negativeButtonText, @NonNull final int positiveAction, @Nullable final Integer negativeAction, @NonNull boolean hasNegativeAction) { AlertDialog.Builder builder; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { builder = new AlertDialog.Builder(context, android.R.style.Theme_Material_Dialog_Alert); } else { builder = new AlertDialog.Builder(context); } builder.setTitle(alertDialogTitle) .setMessage(alertDialogMessage) .setPositiveButton(positiveButtonText, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { switch (positiveAction) { case 1: //TODO:Do your positive action here break; } } }); if(hasNegativeAction || negativeAction!=null || negativeButtonText!=null) { builder.setNegativeButton(negativeButtonText, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { switch (negativeAction) { case 1: //TODO:Do your negative action here break; //TODO: add cases when needed } } }); } builder.setIcon(android.R.drawable.ic_dialog_alert); builder.show(); }


Podrías usar el generador de alertas para esto:

AlertDialog.Builder builder; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { builder = new AlertDialog.Builder(context, android.R.style.Theme_Material_Dialog_Alert); } else { builder = new AlertDialog.Builder(context); } builder.setTitle("Delete entry") .setMessage("Are you sure you want to delete this entry?") .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // continue with delete } }) .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // do nothing } }) .setIcon(android.R.drawable.ic_dialog_alert) .show();


Prueba este código:

AlertDialog.Builder builder1 = new AlertDialog.Builder(context); builder1.setMessage("Write your message here."); builder1.setCancelable(true); builder1.setPositiveButton( "Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); builder1.setNegativeButton( "No", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); AlertDialog alert11 = builder1.create(); alert11.show();


Puede crear el cuadro de diálogo utilizando AlertDialog.Builder

Prueba esto:

AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("Are you sure you want to delete this entry?"); builder.setPositiveButton("Yes, please", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //perform any action Toast.makeText(getApplicationContext(), "Yes clicked", Toast.LENGTH_SHORT).show(); } }); builder.setNegativeButton("No", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //perform any action Toast.makeText(getApplicationContext(), "No clicked", Toast.LENGTH_SHORT).show(); } }); //creating alert dialog AlertDialog alertDialog = builder.create(); alertDialog.show();

Para cambiar el color de los botones positivo y negativo del cuadro de diálogo Alerta, puede escribir las siguientes dos líneas después de alertDialog.show();

alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(getResources().getColor(R.color.colorPrimary)); alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(getResources().getColor(R.color.colorPrimaryDark));


Puedes crear Activity y extender AppCompatActivity. Luego en el Manifiesto ponemos el siguiente estilo:

<activity android:name=".YourCustomDialog" android:theme="Theme.AppCompat.Light.Dialog"> </activity>

Inflarlo con botones y vistas de texto.

Entonces usa esto como un diálogo.

Por ejemplo, en el linearLayout lleno los siguientes parámetros:

android:layout_width="300dp" android:layout_height="wrap_content"


Puedes usar este código:

AlertDialog.Builder alertDialog2 = new AlertDialog.Builder( AlertDialogActivity.this); // Setting Dialog Title alertDialog2.setTitle("Confirm Delete..."); // Setting Dialog Message alertDialog2.setMessage("Are you sure you want delete this file?"); // Setting Icon to Dialog alertDialog2.setIcon(R.drawable.delete); // Setting Positive "Yes" Btn alertDialog2.setPositiveButton("YES", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // Write your code here to execute after dialog Toast.makeText(getApplicationContext(), "You clicked on YES", Toast.LENGTH_SHORT) .show(); } }); // Setting Negative "NO" Btn alertDialog2.setNegativeButton("NO", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // Write your code here to execute after dialog Toast.makeText(getApplicationContext(), "You clicked on NO", Toast.LENGTH_SHORT) .show(); dialog.cancel(); } }); // Showing Alert Dialog alertDialog2.show();


Sólo uno simple! Cree un método de diálogo, algo como esto en cualquier parte de su clase de Java:

public void openDialog() { final Dialog dialog = new Dialog(context); // Context, this, etc. dialog.setContentView(R.layout.dialog_demo); dialog.setTitle(R.string.dialog_title); dialog.show(); }

Ahora cree Layout XML dialog_demo.xml y cree su UI / diseño. Aquí hay una muestra que creé para propósitos de demostración:

<?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"> <TextView android:id="@+id/dialog_info" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:text="@string/dialog_text"/> <LinearLayout android:layout_width="match_parent" android:layout_height="40dp" android:layout_below="@id/dialog_info"> <Button android:id="@+id/dialog_cancel" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="0.50" android:background="@color/dialog_cancel_bgcolor" android:text="Cancel"/> <Button android:id="@+id/dialog_ok" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="0.50" android:background="@color/dialog_ok_bgcolor" android:text="Agree"/> </LinearLayout> </RelativeLayout>

Ahora puede llamar a openDialog() desde cualquier lugar que desee :) Aquí está la captura de pantalla del código anterior.

Tenga en cuenta que el texto y el color se utilizan desde strings.xml y colors.xml . Puedes definir el tuyo propio.


Solo tenga cuidado cuando desee descartar el cuadro de diálogo - use dialog.dismiss() . En mi primer intento, utilicé el dismissDialog(0) (que probablemente copié de algún lugar) que a veces funciona. Usar el objeto que el sistema suministra suena como una opción más segura.


También puedes probar de esta manera, te proporcionará diálogos de estilo de material.

private void showDialog() { String text2 = "<font color=#212121>Medi Notification</font>";//for custom title color AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.AppCompatAlertDialogStyle); builder.setTitle(Html.fromHtml(text2)); String text3 = "<font color=#A4A4A4>You can complete your profile now or start using the app and come back later</font>";//for custom message builder.setMessage(Html.fromHtml(text3)); builder.setPositiveButton("DELETE", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { toast = Toast.makeText(getApplicationContext(), "DELETE", Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); } }); builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { toast = Toast.makeText(getApplicationContext(), "CANCEL", Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); } }); builder.show(); }


Utilice AlertDialog.Builder

AlertDialog alertDialog = new AlertDialog.Builder(this) //set icon .setIcon(android.R.drawable.ic_dialog_alert) //set title .setTitle("Are you sure to Exit") //set message .setMessage("Exiting will call finish() method") //set positive button .setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { //set what would happen when positive button is clicked finish(); } }) //set negative button .setNegativeButton("No", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { //set what should happen when negative button is clicked Toast.makeText(getApplicationContext(),"Nothing Happened",Toast.LENGTH_LONG).show(); } }) .show();

Obtendrá la siguiente salida.

Para ver el tutorial de diálogo de alerta utilice el siguiente enlace.

Tutorial de diálogo de alerta de Android


para mi

new AlertDialog.Builder(this) .setTitle("Closing application") .setMessage("Are you sure you want to exit?") .setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }).setNegativeButton("No", null).show();


puedes probar esto ...

AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this); dialog.setCancelable(false); dialog.setTitle("Dialog on Android"); dialog.setMessage("Are you sure you want to delete this entry?" ); dialog.setPositiveButton("Delete", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { //Action for "Delete". } }) .setNegativeButton("Cancel ", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //Action for "Cancel". } }); final AlertDialog alert = dialog.create(); alert.show();

Para más información, revisa este enlace ...


new AlertDialog.Builder(v.getContext()).setMessage("msg to display!").show();


new AlertDialog.Builder(context) .setTitle("title") .setMessage("message") .setPositiveButton(android.R.string.ok, null) .show();


// Dialog box public void dialogBox() { AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this); alertDialogBuilder.setMessage("Click on Image for tag"); alertDialogBuilder.setPositiveButton("Ok", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { } }); alertDialogBuilder.setNegativeButton("cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { } }); AlertDialog alertDialog = alertDialogBuilder.create(); alertDialog.show(); }


Try this code AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder( MainActivity.this); // set title alertDialogBuilder.setTitle("AlertDialog Title"); // set dialog message alertDialogBuilder .setMessage("Some Alert Dialog message.") .setCancelable(false) .setPositiveButton("OK",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int id) { Toast.makeText(this, "OK button click ", Toast.LENGTH_SHORT).show(); } }) .setNegativeButton("CANCEL",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { Toast.makeText(this, "CANCEL button click ", Toast.LENGTH_SHORT).show(); dialog.cancel(); } }); // create alert dialog AlertDialog alertDialog = alertDialogBuilder.create(); // show it alertDialog.show();


import android.app.*; import android.os.Bundle; import android.view.Gravity; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup.LayoutParams; import android.widget.*; public class ShowPopUp extends Activity { PopupWindow popUp; LinearLayout layout; TextView tv; LayoutParams params; LinearLayout mainLayout; Button but; boolean click = true; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); popUp = new PopupWindow(this); layout = new LinearLayout(this); mainLayout = new LinearLayout(this); tv = new TextView(this); but = new Button(this); but.setText("Click Me"); but.setOnClickListener(new OnClickListener() { public void onClick(View v) { if (click) { popUp.showAtLocation(mainLayout, Gravity.BOTTOM, 10, 10); popUp.update(50, 50, 300, 80); click = false; } else { popUp.dismiss(); click = true; } } }); params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); layout.setOrientation(LinearLayout.VERTICAL); tv.setText("Hi this is a sample text for popup window"); layout.addView(tv, params); popUp.setContentView(layout); // popUp.showAtLocation(layout, Gravity.BOTTOM, 10, 10); mainLayout.addView(but, params); setContentView(mainLayout); } }


public void showSimpleDialog(View view) { // Use the Builder class for convenient dialog construction AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setCancelable(false); builder.setTitle("AlertDialog Title"); builder.setMessage("Simple Dialog Message"); builder.setPositiveButton("OK!!!", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { // } }) .setNegativeButton("Cancel ", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); // Create the AlertDialog object and return it builder.create().show(); }

También puedes ver mi blog sobre diálogos en Android, encontrarás todos los detalles aquí: http://www.fahmapps.com/2016/09/26/dialogs-in-android-part1/ .