¿Cómo elimino el fondo negro de un cuadro de diálogo en Android? La foto muestra el problema.
final Dialog dialog = new Dialog(Screen1.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.themechanger);
¿Cómo elimino el fondo negro de un cuadro de diálogo en Android? La foto muestra el problema.
final Dialog dialog = new Dialog(Screen1.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.themechanger);
Respuestas:
Agrega este código
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
O este en su lugar:
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
dialog.getWindow().setBackgroundDrawable(new ColorDrawableResource(R.color.transparent));
dialog.getWindow().setBackgroundDrawableResource(R.color.transparent);
<style name="NewDialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowTitleStyle">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="android:backgroundDimEnabled">false</item>
<item name="android:background">@android:color/transparent</item>
</style>
uso en java
Dialog dialog = new Dialog(this, R.style.NewDialog);
Espero ayudarte!
Me he enfrentado al problema más simple y la solución que se me ocurrió fue aplicar un tema de fondo transparente. Escribe estas líneas en tus estilos
<item name="android:windowBackground">@drawable/blue_searchbuttonpopupbackground</item>
</style>
<style name="Theme.Transparent" parent="android:Theme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
Y luego agrega
android:theme="@style/Theme.Transparent"
en su archivo de manifiesto principal, dentro del bloque de la actividad de diálogo.
Además en su conjunto de actividad de diálogo XML
android:background= "#00000000"
De alguna manera, la solución de Zacharias no funcionó para mí, así que he utilizado el siguiente tema para resolver este problema ...
<style name="DialogCustomTheme" parent="android:Theme.Holo.Dialog.NoActionBar">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
</style>
Uno puede configurar este tema para el diálogo como a continuación
final Dialog dialog = new Dialog(this, R.style.DialogCustomTheme);
¡¡Disfrutar!!
Puedes usar el:
setBackgroundDrawable(null);
método. Y el siguiente es el documento:
/**
* Set the background to a given Drawable, or remove the background. If the
* background has padding, this View's padding is set to the background's
* padding. However, when a background is removed, this View's padding isn't
* touched. If setting the padding is desired, please use
* {@link #setPadding(int, int, int, int)}.
*
* @param d The Drawable to use as the background, or null to remove the
* background
*/
El diálogo emergente llena el color de fondo negro predeterminado o el color del tema, por lo que debe establecer el TRANSPARENT
fondo en el cuadro de diálogo. Pruebe el siguiente código: -
final Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
dialog.setContentView(R.layout.splash);
dialog.show();
si quieres destruir el fondo oscuro del diálogo, usa esto
dialog.getWindow().setDimAmount(0);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Objects.requireNonNull(alertDialog.getWindow()).setDimAmount(0); }
Un problema que encontré con todas las respuestas existentes es que los márgenes no se conservan. Esto es porque todos anulan elandroid:windowBackground
atributo, que es responsable de los márgenes, con un color sólido. Sin embargo, investigué un poco en el SDK de Android y encontré el fondo de la ventana predeterminado dibujable, y lo modifiqué un poco para permitir diálogos transparentes.
Primero, copie /platforms/android-22/data/res/drawable/dialog_background_material.xml a su proyecto. O simplemente copie estas líneas en un nuevo archivo:
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:inset="16dp">
<shape android:shape="rectangle">
<corners android:radius="2dp" />
<solid android:color="?attr/colorBackground" />
</shape>
</inset>
Tenga en cuenta que android:color
se establece en ?attr/colorBackground
. Este es el gris / blanco sólido predeterminado que ves. Para permitir que el color definido en android:background
su estilo personalizado sea transparente y muestre la transparencia, todo lo que tenemos que hacer es cambiar ?attr/colorBackground
a @android:color/transparent
. Ahora se verá así:
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:inset="16dp">
<shape android:shape="rectangle">
<corners android:radius="2dp" />
<solid android:color="@android:color/transparent" />
</shape>
</inset>
Después de eso, vaya a su tema y agregue esto:
<style name="MyTransparentDialog" parent="@android:style/Theme.Material.Dialog">
<item name="android:windowBackground">@drawable/newly_created_background_name</item>
<item name="android:background">@color/some_transparent_color</item>
</style>
Asegúrese de reemplazar newly_created_background_name
con el nombre real del archivo dibujable que acaba de crear y reemplácelo some_transparent_color
con el fondo transparente deseado.
Después de eso, todo lo que tenemos que hacer es establecer el tema. Use esto cuando cree el AlertDialog.Builder
:
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyTransparentDialog);
Luego, solo crea, crea y muestra el diálogo como de costumbre.
Esto es lo que hice para lograr la translucidez con AlertDialog.
Creó un estilo personalizado:
<style name="TranslucentDialog" parent="@android:style/Theme.DeviceDefault.Dialog.Alert">
<item name="android:colorBackground">#32FFFFFF</item>
</style>
Y luego crea el diálogo con:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.TranslucentDialog);
AlertDialog dialog = builder.create();
En mi caso, la solución funciona así:
dialog_AssignTag.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
Y además en Xml de diálogo personalizado:
android:alpha="0.8"
Establecer estos códigos de estilo en estilo
<style name="Theme.Transparent" parent="android:Theme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
Y simplemente cambie falso a verdadero debajo de la línea
<item name="android:backgroundDimEnabled">true</item>
Atenuará tu fondo.
Atención: no use el generador para cambiar el fondo.
Dialog dialog = new Dialog.Builder(MainActivity.this)
.setView(view)
.create();
dialog.show();dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
cambiar a
Dialog dialog = new Dialog(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(view);
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
dialog.show();
Al usar Dialog.builder, no está dando getWindow()
opción en él.
En caso de que haya extendido la DialogFrament
clase, puede configurar el tema con:
setStyle(DialogFragment.STYLE_NORMAL, R.style.customDialogTheme);
Y luego cree el tema personalizado en su archivo styles.xml (consulte la respuesta de @ LongLv para ver los parámetros)
No olvide agregar <item name="android:windowCloseOnTouchOutside">true</item>
si desea que el cuadro de diálogo se cierre si el usuario toca fuera del cuadro de diálogo.
Para cualquiera que use un diálogo personalizado con una clase personalizada, debe cambiar la transparencia en la clase, agregar esta línea en onCreate ():
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
Asegurarse R.layout.themechanger
no tenga color de fondo porque, por defecto, el cuadro de diálogo tiene un color de fondo predeterminado.
También necesitas agregar dialog.getWindow().setBackgroundDrawable(newColorDrawable(Color.TRANSPARENT));
Y finalmente
<style name="TransparentDialog">
<item name="android:windowIsFloating">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowTitleStyle">@null</item>
</style>