Os voy a explicar cómo podemos crear un Alert personalizado en Android para que no parezca que ha sido generado por el sistema y se pueda integrar en nuestra propia APP. Recuerdo que un Alert es un cuadro de diálogo qué sirve para mostrar un texto con opciones sobre la interfaz de usuario, más info aquí: https://developer.android.com/guide/topics/ui/dialogs?hl=es-419
Para que os hagáis una idea, así es cómo quedaría un Alert personalizado en Android:

¿Queda guay verdad?
Para poder conseguir un Custom Alert o Alert personalizado vamos a hacer los siguientes pasos:
- Creamos la vista personalizada dentro de res/layouts y la llamamos custom_alert.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/contenedorAlerta"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:orientation="vertical">
<LinearLayout
android:id="@+id/capaTitulo"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_gravity="left"
android:layout_marginLeft="20dp"
android:layout_marginTop="20dp"
android:layout_marginRight="20dp"
android:layout_weight="0.5"
android:orientation="vertical">
<TextView
android:id="@+id/tituloAlerta"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Título de la alerta" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_gravity="left"
android:layout_marginLeft="20dp"
android:layout_marginTop="10dp"
android:layout_marginRight="20dp"
android:layout_marginBottom="10dp"
android:layout_weight="4.5"
android:orientation="vertical">
<LinearLayout
android:id="@+id/capaContenidoAlerta"
android:layout_width="400dp"
android:layout_gravity="center"
android:layout_height="180dp"
android:layout_marginBottom="20dp"
android:orientation="horizontal">
<TextView
android:id="@+id/contenidoAlerta"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Esto es una alerta de prueba" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_gravity="right"
android:layout_marginRight="10dp"
android:layout_weight="1"
android:orientation="horizontal">
<Button
android:id="@+id/botonPositivo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:backgroundTint="#1666C0"
android:text="Aceptar"
android:textAllCaps="false"
android:textColor="#FFFFFFFF" />
<Button
android:id="@+id/botonNegativo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:backgroundTint="#b71c1c"
android:text="Cancelar"
android:textAllCaps="false"
android:textColor="#FFFFFFFF" />
</LinearLayout>
</LinearLayout>
Con este código hemos creado la siguiente vista:

- Ahora, creamos una clase a la que llamamos CustomAlert.java
En la clase añadimos lo siguiente:
public class CustomAlert {
//Guardamos Activity para acceder a elementos del sistema
private Activity activity;
//Aquí guardamos nuestro dialog construido
private Dialog dialog;
//View del dialogo
private View dialogView;
//Constructor con parámetro Activity
public CustomAlert(Activity activity) {
this.activity = activity;
//Crea el alert
AlertDialog.Builder dialog = new AlertDialog.Builder(activity);
//Instanciamos a LayoutInflater para poder cargar una vista personalizada (View)
LayoutInflater inflater = activity.getLayoutInflater();
//Cargamos la vista personalizada custom_alert.xml que hemos creado en el paso anterior.
dialogView = inflater.inflate(R.layout.custom_alert, null);
//Añadimos dicha vista al dialog
dialog .setView(dialogView);
}
}
Con el código añadido creamos un objeto llamado CustomAlert que tiene asignada la vista custom_alert.xml que hemos creado en el paso anterior.
- Ahora añadimos un get para los botones y la función de mostrar el alert.
public class CustomAlert {
//Guardamos Activity para acceder a elementos del sistema
private Activity activity;
//Aquí guardamos nuestro dialog construido
private Dialog dialog;
//View del dialogo
private View dialogView;
//Constructor con parámetro Activity
public CustomAlert(Activity activity) {
this.activity = activity;
//Crea el alert
AlertDialog.Builder dialog = new AlertDialog.Builder(activity);
//Instanciamos a LayoutInflater para poder cargar una vista personalizada (View)
LayoutInflater inflater = activity.getLayoutInflater();
//Cargamos la vista personalizada custom_alert.xml que hemos creado en el paso anterior.
dialogView = inflater.inflate(R.layout.custom_alert, null);
//Añadimos dicha vista al dialog
dialog .setView(dialogView);
}
//Obtiene el boton de cancelar
public Button botonCancelar(){
return dialogView.findViewById(R.id.botonNegativo);
}
//Obtiene el boton de aceptar
public Button botonAceptar(){
return dialogView.findViewById(R.id.botonAceptar);
}
//Para mostrar el alert
public void show(){
dialog.show();
}
}
Con este código ya podemos manejar el evento de los botones (métodos botonAceptar(), botonCancelar()), por ejemplo ocultarlos o asignarles un onclick.
Y con el método show(), podemos mostrar el alert.

Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.