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:
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):
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:
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.
Recuerda que puedes comunicar este post si te ayudó.