Estoy tratando de generar un diálogo personalizado en Android. Creo mi diálogo así:
dialog = new Dialog(this);
dialog.setContentView(R.layout.my_dialog);
Todo funciona bien, excepto el título del Diálogo. Incluso si no configuro el título del cuadro de diálogo, la ventana emergente del cuadro de diálogo tiene un espacio en blanco en la posición del cuadro de diálogo.
¿Hay alguna forma de ocultar esta parte del Diálogo?
Lo probé con un AlertDialog pero parece que el diseño no está configurado correctamente:
LayoutInflater inflater =
(LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.map_dialog, null);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(view);
// dialog = new Dialog(this);
// dialog.setContentView(R.layout.map_dialog);
dialog = builder.create();
((TextView) dialog.findViewById(R.id.nr)).setText(number);
Si uso este código, obtengo una excepción de puntero nula en la última línea. El diálogo no es nulo, por lo que el TextView que intento recuperar no existe.
Si elimino el comentario de la parte en la que uso el Constructor de diálogos, todo funciona bien, excepto el título que se encuentra sobre mi diseño de diálogo.
fuente
Respuestas:
Puede ocultar el título de un diálogo usando:
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
Versión anterior de esta respuesta, que es demasiado complicada:
Necesitas usar un
AlertDialog
. Hay una buena explicación en el sitio del desarrollador de Android sobre diálogos personalizados .En resumen muy breve, lo haces con el código que se copia a continuación del sitio web oficial. Eso toma un archivo layot personalizado, lo infla, le da texto e íconos básicos y luego lo crea. Entonces lo mostrarías con
alertDialog.show()
.En respuesta al comentario:
Supongo que TextView con la identificación
nr
está en la Vista con la que está inflandoView view = inflater....
. Si es así, entonces necesita cambiar solo un bit: en lugar dedialog.findView...
hacerloview.findView...
. Luego, una vez que haya hecho eso, recuerde usar dialog.show (), o incluso builder.show () sin molestarse en hacer builder.create ().fuente
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
FEATURE_NO_TITLE funciona al crear un diálogo desde cero, como en:
Pero no funciona al crear un AlertDialog (o al usar el Generador), porque ya deshabilita el título y usa uno personalizado internamente.
He examinado las fuentes del SDK y creo que no se puede solucionar. Entonces, para eliminar el espacio superior, la única solución es crear un diálogo personalizado desde cero IMO, utilizando la clase Dialog directamente.
Además, se puede hacer eso con un estilo, por ejemplo, en styles.xml:
Y entonces:
fuente
Dialog
, pero crear unaAlertDialog
fue mucho más fácil. Como se afirma en los documentos :The Dialog class is the base class for dialogs, but you should avoid instantiating Dialog directly. Instead, use one of the following subclasses: <AlertDialog and others described here>
. ElAlertDialog
también maneja cosas del ciclo de vida y ok / cancel de manera fácil.En su código agregue esta línea
O en XML usa un tema
XML sería una mejor implementación ya que con la versión del código se crea la barra de título y luego se elimina, lo cual es un desperdicio de recursos
Cambie el tipo de diálogo de alerta al diálogo del sistema (por ejemplo, TYPE_SYSTEM_OVERLAY) y vea si esto resuelve su problema
fuente
Usar así:
Esto eliminará cualquier barra de título de la ventana de diálogo.
fuente
Use el siguiente código antes
setcontentview
: -Nota : debe tener el código anterior, en el mismo orden y línea.
requestWindowFeature
debe estar antes de la línea setContentView.fuente
puedes quitar el título
donde diálogo es el nombre de mi diálogo.
fuente
En su código, si lo usa,
requestWindowFeature(Window.FEATURE_NO_TITLE);
asegúrese de que vaya antes, de lodialog.setContentView();
contrario, la aplicación se bloqueará.fuente
Encontré Three Way para hacer esto>
1) Usando requestWindowFeature
2) Usando estilo (style.xml)
3) Uso del tema XML en AndroidManifest.xml
fuente
En su clase Custom_Dialog.java agregue
requestWindowFeature(Window.FEATURE_NO_TITLE)
fuente
La respuesta de olivierg funcionó para mí y es la mejor solución si crear una clase de Diálogo personalizada es la ruta que desea seguir. Sin embargo, me molestó que no pudiera usar la clase AlertDialog. Quería poder usar el estilo predeterminado del sistema AlertDialog. Crear una clase de diálogo personalizada no tendría este estilo.
Así que encontré una solución (hack) que funcionará sin tener que crear una clase personalizada, puede usar los constructores existentes.
AlertDialog coloca una Vista sobre su vista de contenido como un marcador de posición para el título. Si encuentra la vista y establece la altura en 0, el espacio desaparece.
He probado esto en 2.3 y 3.0 hasta ahora, es posible que todavía no funcione en todas las versiones.
Aquí hay dos métodos de ayuda para hacerlo:
Aquí hay un ejemplo de cómo se usa:
Si está utilizando esto con un DialogFragment, anule el
onCreateDialog
método del DialogFragment . Luego cree y devuelva su diálogo como el primer ejemplo anterior. El único cambio es que debe pasar falso como el tercer parámetro (show) para que no llame a show () en el cuadro de diálogo. El DialogFragment se encargará de eso más tarde.Ejemplo:
A medida que lo pruebe más, me aseguraré de actualizar con cualquier ajuste adicional necesario.
fuente
No sé si esta pregunta sigue siendo real, pero en mi caso, cuando cambié de Dialog a DialogFragment,
no era una opción, pero podría usar
en cambio con el mismo resultado.
fuente
setStyle(STYLE_NO_TITLE, 0);
) irá en el método onCreate de su clase DialogFragment.Establezca el título para vaciar la cadena usando el generador.
fuente
establezca el atributo "gravedad" en todo el cuadro de diálogo en "centro". Luego, deberá anular esa configuración para todos los componentes secundarios en el cuadro de diálogo que no desea centrar.
fuente
fuente
en XML usa un tema
fuente
Si simplemente usamos el cuadro de diálogo sin el
setTitle()
, ¿funcionará eso para eliminar el espacio del título?fuente
Creo que puedes usar esto ahora:
fuente
crea un cuadro de diálogo sin título
fuente
fuente
Mientras usa AlertDialog, no usarlo
setTitle()
hace que el título desaparezcafuente
Después de un montón de piratería, conseguí que esto funcione:
fuente
dialog
aquí ygetResources()
Puede hacer esto sin usar
AlertDialog
definiendo una nueva Clase que se extienda desde laDialog
Clase de esta manera:fuente
Aquí hay algo que puede hacer
AlertBuilder
para que el título desaparezca:fuente
Utilizar este
fuente
dialog_custom .requestWindowFeature (Window.FEATURE_NO_TITLE);
esto eliminará el título del cuadro de diálogo de cutom.
Nota agregue estas líneas antes de agregar contenido ... por ejemplo
fuente