Cómo colocar un icono en el título de un diálogo personalizado
Me gustaría colocar un dibujable en una barra de título de diálogos. He intentado lo siguiente:
final Dialog dialog = new Dialog(this); dialog.requestWindowFeature(Window.FEATURE_LEFT_ICON); dialog.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, R.drawable.some_icon); dialog.setTitle(R.string.my_dialog_title); dialog.setContentView(R.layout.my_dialog_layout); ...
El icono no aparece, pero el título se mueve un poco hacia la derecha. Parece que el diálogo reserva espacio para el dibujable pero no lo dibuja. He probado varios iconos diferentes (también de los recursos de Android), pero no de ellos funcionó.
- Eliminar la barra de título de la aplicación para Android
- Cambio de la barra de título de Android de fondo
- Android: Añadir botón a la barra de título personalizada
- Diálogo personalizado de Android muestra la barra de título de android
- ¿El ID de barra de título / acción en android?
- ¿Cómo puedo añadir un spinner a la barra de título de una actividad?
- ¿La barra de título de la aplicación para Android no aparece al probar la aplicación?
- ¿Qué debo añadir a un diseño para ocultar la barra de título?
- La barra de título ocultada de Android vuelve
- Actividad de Android como diálogo, pero sin una barra de título
- Cambiar la fuente del título de la aplicación en android
- Android: Barra de título personalizada
Llame a setFeatureDrawableResource()
después de show()
.
No tengo idea de por qué esto funciona. 🙂
Aquí está la solución
final Dialog dialog = new Dialog(this); dialog.requestWindowFeature(Window.FEATURE_LEFT_ICON); dialog.setTitle(R.string.my_dialog_title); dialog.setContentView(R.layout.my_dialog_layout); dialog.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON,R.drawable.some_icon); dialog.show();
Si desea que su cuadro de diálogo aparezca como una actividad que agregue el tema al diálogo como sigue
final Dialog dialog = new Dialog(this,AlertDialog.THEME_HOLO_LIGHT);
También puede ampliar la clase de Dialog
la siguiente manera:
public class CustomDialog extends Dialog { public CustomDialog(Context context) { super(context); setTitle("Some Title"); requestWindowFeature(Window.FEATURE_LEFT_ICON); setContentView(R.layout.my_layout); } @Override protected void onStart() { setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, R.drawable.my_icon); super.onStart(); }
Es decir, prepara la función de ventana en el constructor y luego establece el recurso concreto en onStart.
Por lo tanto, en su código principal simplemente puede utilizar:
CustomDialog cd = new CustomDialog(getActivity()); rd.show();
Aquí está la solución. ¡Sigue la receta y tendrás tu icono! Nota: el orden es muy importante …
final Dialog yourDialog = new Dialog(YourClass.this); yourDialog.requestWindowFeature(Window.FEATURE_LEFT_ICON); //must come BEFORE setContentView yourDialog.setContentView(R.layout.yourDialog_layout); yourDialog.setTitle("Your Title"); yourDialog.setCancelable(true); yourDialog.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, R.drawable.your_icon); //must come AFTER setContentView
Lo hice funcionar de otra manera, gracias al puesto de Smaïl Hammour.
Coloque este método estático en su clase de herramienta preferida:
public static void msgBox( String msg, String title, int type, final Context c){ int theIcon = drawable.ic_dialog_alert; switch(type){ case YourToolClass.CONFIRMATION: theIcon = drawable.ic_menu_help; break; case YourToolClass.INFO: theIcon = drawable.ic_dialog_info; break; case YourToolClass.ALERT: default: } AlertDialog.Builder builder = new AlertDialog.Builder(c); /* Here enters the .setIcon: */ builder.setMessage(msg) .setTitle (title) .setIcon(theIcon); builder.setPositiveButton( "OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { /* */ } }); AlertDialog dialog = builder.create(); dialog.show(); }
Invocar:
YourToolClass.msgBox("the main message goes here", "Test", getBaseContext());
setIcon(R.drawable.image_name)
Llamando a setFeatureDrawableResource como esta
dialog.show(); dialog.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, R.drawable.logo_1x);
Es decir, después de llamar a dialog.show () funcionó perfectamente en mi caso .. gracias .. 🙂