Como faço para remover o fundo preto de uma caixa de diálogo no Android. A foto mostra o problema.
final Dialog dialog = new Dialog(Screen1.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.themechanger);
Como faço para remover o fundo preto de uma caixa de diálogo no Android. A foto mostra o problema.
final Dialog dialog = new Dialog(Screen1.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.themechanger);
Respostas:
Adicione este código
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
Ou este aqui:
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>
usar em java
Dialog dialog = new Dialog(this, R.style.NewDialog);
Espero te ajudar!
Eu enfrentei o problema mais simples e a solução que encontrei foi a aplicação de um TEMA transparente do bachground. Escreva estas linhas nos seus 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>
E então adicione
android:theme="@style/Theme.Transparent"
no seu arquivo de manifesto principal, dentro do bloco da atividade de diálogo.
Além disso, no conjunto XML de atividades de diálogo
android:background= "#00000000"
De alguma forma, a solução Zacharias não funcionou para mim, então usei o tema abaixo para resolver esse 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>
Pode-se definir este tema para dialogar como abaixo
final Dialog dialog = new Dialog(this, R.style.DialogCustomTheme);
Aproveitar!!
Você pode usar o:
setBackgroundDrawable(null);
e a seguir está o 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
*/
A caixa de diálogo pop-up preenche a cor de fundo preta padrão ou a cor do tema, para que você precise definir o TRANSPARENT
plano de fundo na caixa de diálogo. Experimente o código abaixo: -
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 você quiser destruir o fundo escuro da caixa de diálogo, use este
dialog.getWindow().setDimAmount(0);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Objects.requireNonNull(alertDialog.getWindow()).setDimAmount(0); }
Um problema que encontrei com todas as respostas existentes é que as margens não são preservadas. Isso ocorre porque todos eles substituem o android:windowBackground
atributo, responsável pelas margens, por uma cor sólida. No entanto, pesquisei no Android SDK e encontrei o fundo da janela padrão que pode ser desenhado e modificado um pouco para permitir diálogos transparentes.
Primeiro, copie /platforms/android-22/data/res/drawable/dialog_background_material.xml para o seu projeto. Ou copie estas linhas para um novo arquivo:
<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>
Observe que android:color
está definido como ?attr/colorBackground
. Este é o cinza / branco sólido padrão que você vê. Para permitir que a cor definida em android:background
seu estilo personalizado seja transparente e mostre a transparência, tudo o que precisamos fazer é mudar ?attr/colorBackground
para @android:color/transparent
. Agora ficará assim:
<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>
Depois disso, vá para o seu tema e adicione isto:
<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>
Substitua newly_created_background_name
pelo nome real do arquivo que você acabou de criar e substitua some_transparent_color
pelo fundo transparente desejado.
Depois disso, tudo o que precisamos fazer é definir o tema. Use isso ao criar o AlertDialog.Builder
:
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyTransparentDialog);
Em seguida, basta criar, criar e mostrar a caixa de diálogo como de costume!
Foi o que fiz para obter translucidez com o AlertDialog.
Criou um estilo personalizado:
<style name="TranslucentDialog" parent="@android:style/Theme.DeviceDefault.Dialog.Alert">
<item name="android:colorBackground">#32FFFFFF</item>
</style>
E, em seguida, crie a caixa de diálogo com:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.TranslucentDialog);
AlertDialog dialog = builder.create();
No meu caso, a solução funciona assim:
dialog_AssignTag.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
Além disso, no Xml da caixa de diálogo personalizada:
android:alpha="0.8"
Defina esses códigos de estilo com 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>
E simplesmente altere false para true abaixo da linha
<item name="android:backgroundDimEnabled">true</item>
Vai escurecer o seu fundo.
Atenção: Não use o construtor para alterar o plano de fundo.
Dialog dialog = new Dialog.Builder(MainActivity.this)
.setView(view)
.create();
dialog.show();dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
mudar para
Dialog dialog = new Dialog(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(view);
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
dialog.show();
Ao usar o Dialog.builder, ele não está dando getWindow()
opção nele.
Caso você tenha estendido a DialogFrament
turma, você pode definir o tema com:
setStyle(DialogFragment.STYLE_NORMAL, R.style.customDialogTheme);
E crie o tema personalizado no seu arquivo styles.xml (consulte a resposta de @ LongLv para obter parâmetros)
Não esqueça de adicionar <item name="android:windowCloseOnTouchOutside">true</item>
se deseja que a caixa de diálogo seja fechada se o usuário tocar fora dela.
Para quem usa uma caixa de diálogo personalizada com uma classe personalizada, é necessário alterar a transparência na classe, adicionar esta linha no onCreate ():
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
Certifique-se de R.layout.themechanger
que não há cor de fundo porque, por padrão, a caixa de diálogo tem uma cor de fundo padrão.
Você também precisa adicionar dialog.getWindow().setBackgroundDrawable(newColorDrawable(Color.TRANSPARENT));
E 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>