Come rimuovo lo sfondo nero da una finestra di dialogo in Android. L'immagine mostra il problema.
final Dialog dialog = new Dialog(Screen1.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.themechanger);
Come rimuovo lo sfondo nero da una finestra di dialogo in Android. L'immagine mostra il problema.
final Dialog dialog = new Dialog(Screen1.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.themechanger);
Risposte:
Aggiungi questo codice
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
O questo invece:
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>
utilizzare in java
Dialog dialog = new Dialog(this, R.style.NewDialog);
Spero di aiutarti!
Ho affrontato il problema più semplice e la soluzione che mi è venuta in mente è stata applicare un TEMA di bachground trasparente. Scrivi queste righe nei tuoi stili
<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>
E poi aggiungi
android:theme="@style/Theme.Transparent"
nel tuo file manifest principale, all'interno del blocco dell'attività della finestra di dialogo.
Inoltre, nel set XML dell'attività di dialogo
android:background= "#00000000"
In qualche modo la soluzione di Zaccaria non ha funzionato per me, quindi ho usato il tema seguente per risolvere questo 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>
Si può impostare questo tema nella finestra di dialogo come di seguito
final Dialog dialog = new Dialog(this, R.style.DialogCustomTheme);
Godere!!
Puoi usare:
setBackgroundDrawable(null);
method.E seguito è il 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
*/
La finestra a comparsa riempie il colore di sfondo nero predefinito o il colore del tema, quindi è necessario impostare lo TRANSPARENT
sfondo in Dialog. Prova sotto il codice: -
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();
se vuoi distruggere lo sfondo scuro della finestra di dialogo, usa questo
dialog.getWindow().setDimAmount(0);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Objects.requireNonNull(alertDialog.getWindow()).setDimAmount(0); }
Un problema che ho riscontrato con tutte le risposte esistenti è che i margini non vengono conservati. Questo perché tutti sovrascrivono l' android:windowBackground
attributo, che è responsabile dei margini, con un colore solido. Tuttavia, ho scavato nell'SDK di Android e ho trovato lo sfondo della finestra predefinito disegnabile, e l'ho modificato un po 'per consentire dialoghi trasparenti.
Innanzitutto, copia /platforms/android-22/data/res/drawable/dialog_background_material.xml nel tuo progetto. In alternativa, copia queste righe in un nuovo file:
<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>
Si noti che android:color
è impostato su ?attr/colorBackground
. Questo è il grigio / bianco solido predefinito che vedi. Per consentire il colore definito in android:background
nel vostro stile personalizzato di essere trasparenti e mostrare la trasparenza, tutto quello che dobbiamo fare è cambiare ?attr/colorBackground
a @android:color/transparent
. Ora sembrerà così:
<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>
Successivamente, vai al tuo tema e aggiungi questo:
<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>
Assicurati di sostituire newly_created_background_name
con il nome effettivo del file disegnabile che hai appena creato e sostituiscilo some_transparent_color
con lo sfondo trasparente desiderato.
Dopodiché tutto ciò che dobbiamo fare è impostare il tema. Utilizzare questo durante la creazione di AlertDialog.Builder
:
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyTransparentDialog);
Quindi crea, crea e mostra la finestra di dialogo come al solito!
Questo è quello che ho fatto per ottenere la traslucenza con AlertDialog.
Creato uno stile personalizzato:
<style name="TranslucentDialog" parent="@android:style/Theme.DeviceDefault.Dialog.Alert">
<item name="android:colorBackground">#32FFFFFF</item>
</style>
E quindi crea la finestra di dialogo con:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.TranslucentDialog);
AlertDialog dialog = builder.create();
Nel mio caso la soluzione funziona in questo modo:
dialog_AssignTag.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
E inoltre in Xml della finestra di dialogo personalizzata:
android:alpha="0.8"
Imposta questi codici di stile con stile
<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>
E semplicemente cambia da falso a vero sotto la linea
<item name="android:backgroundDimEnabled">true</item>
Diminuirà il tuo sfondo.
Attenzione: non utilizzare il builder per cambiare lo sfondo.
Dialog dialog = new Dialog.Builder(MainActivity.this)
.setView(view)
.create();
dialog.show();dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
cambia in
Dialog dialog = new Dialog(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(view);
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
dialog.show();
Quando si utilizza Dialog.builder, non offre alcuna getWindow()
opzione.
Nel caso in cui hai esteso la DialogFrament
classe, puoi impostare il tema con:
setStyle(DialogFragment.STYLE_NORMAL, R.style.customDialogTheme);
E poi crea il tema personalizzato nel tuo file styles.xml (vedi la risposta di @ LongLv per i parametri)
Non dimenticare di aggiungere <item name="android:windowCloseOnTouchOutside">true</item>
se desideri che la finestra di dialogo venga chiusa se l'utente tocca al di fuori della finestra di dialogo.
Per chiunque utilizzi una finestra di dialogo personalizzata con una classe personalizzata è necessario modificare la trasparenza nella classe aggiungere questa riga in onCreate ():
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
Assicurarsi che R.layout.themechanger
non abbia colore di sfondo perché per impostazione predefinita la finestra di dialogo ha un colore di sfondo predefinito.
È inoltre necessario aggiungere dialog.getWindow().setBackgroundDrawable(newColorDrawable(Color.TRANSPARENT));
E infine
<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>