Saltar al contenido

Android AlertDialog con esquinas redondeadas

Este dilema se puede resolver de diversas maneras, pero nosotros te dejamos la que para nosotros es la resolución más completa.

Solución:

Puedes hacerlo usando el siguiente código:

CustomDialog.java:

public class MainActivity extends Activity

    private static final int ALERT_DIALOG = 1;

    @Override
    public void onCreate( Bundle savedInstanceState )
    
        super.onCreate( savedInstanceState );
        setContentView( R.layout.main );

        ( (Button) findViewById( R.id.button1 ) )
            .setOnClickListener( new OnClickListener()
                
                    public void onClick( View v )
                    
                        showDialog( ALERT_DIALOG );
                    
                
            );
    

    @Override
    protected Dialog onCreateDialog( int id )
        Dialog dialog = null;
        if ( id == ALERT_DIALOG )
        
            ContextThemeWrapper ctw = new ContextThemeWrapper( this, R.style.MyTheme );
            AlertDialog.Builder builder = new AlertDialog.Builder( ctw );
            builder.setMessage( "Hello World" )
                .setTitle( "Alert Dialog" )
                .setIcon( android.R.drawable.ic_dialog_alert )
                .setCancelable( false )
                .setPositiveButton( "Close", new DialogInterface.OnClickListener()
                    
                        public void onClick( DialogInterface dialog, int which )
                           
                                dialog.dismiss();
                           
                         
                    );
            dialog = builder.create();
        
        if ( dialog == null )
        
            dialog = super.onCreateDialog( id );
        
        return dialog;
     
 

dialog_title.xml



    
        
        
        
    

dialog_footer.xml



    
    
    

Simplemente cambie la cantidad de radio en:

dialog_title.xml

y

dialog_footer.xml

y eso generará la siguiente salida:

ingrese la descripción de la imagen aquí

Espero que esto te ayudará.


ACTUALIZAR:

No soy un experto pero esto es lo que encontré. Puede ser correcto o incorrecto. Después de muchos intentos terminé con lo siguiente:

1- ContextThemeWrapper no es aplicable para API 14, funciona bien en Gingerbread y versiones anteriores, pero con API> 10 no funciona.

2- para superar el problema anterior y hacer que funcione en API> 10 según lo solicitado, reemplazo esta línea:

ContextThemeWrapper ctw = new ContextThemeWrapper( this, R.style.MyTheme );
AlertDialog.Builder builder= new AlertDialog.Builder( ctw );

con este:

AlertDialog.Builder builder= new AlertDialog.Builder( this,R.style.MyTheme );

pero necesitas cambiar:

android:minSdkVersion="8"  

para

android:minSdkVersion="11" 

el resultado será como se muestra en la siguiente imagen en ICS (API 14):

ingrese la descripción de la imagen aquí

Esta imagen es de un Samsung Galaxy S3 con ICS.

Nota: el proyecto modificado iniciado con API 14 SO manifest sdk será:



PALABRA FINAL:
Como mi pequeño conocimiento en el desarrollo de Android (no soy un experto),

1- el cuadro de diálogo de alerta personalizado se ejecuta sin problemas en la API < 10 but not > 10 con el mismo código Java,

si queremos que se ejecute en ICS con el mismo efecto que apareció en API <10, necesitamos modificar el código, por lo que se ejecutará en ICS pero no en ninguna versión de API 11.

2- incluso el resultado en ICS no es satisfactorio, la esquina redondeada se aplica solo al título pero no al pie de página.


SEGUNDA ACTUALIZACIÓN:
FINALMENTE tengo todos los rincones redondeados,

SOLO aplica padding para dialog_footer.xml como sigue:



    
    
    
     

Imagen de salida:

ingrese la descripción de la imagen aquí

Esta imagen es de un Samsung Galaxy S3 con ICS.

Solo un paso más de la respuesta de @iDroid Explorer

agregue esta línea cuando construya el diálogo

dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));

y esto hará que el rectángulo desaparezca (que en realidad es transparente) y obtenga un cuadro de diálogo redondeado perfecto.

Solo usa el MaterialAlertDialogBuilder incluido en la biblioteca oficial de Componentes de materiales.

new MaterialAlertDialogBuilder(MainActivity.this,R.style.MyThemeOverlay_MaterialComponents_MaterialAlertDialog)
            .setTitle("Dialog")
            .setMessage("Lorem ipsum dolor ....")
            .setPositiveButton("Ok", /* listener = */ null)
            .setNegativeButton("Cancel", /* listener = */ null)
            .show();

Luego defina el estilo usando el shapeAppearanceOverlay attribute.

 

  

ingrese la descripción de la imagen aquí

Recuerda que puedes comunicar este post si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *