Preciso criar um diálogo sobre um fragmento (que ocupa toda a tela). O diálogo precisa ser um diálogo flutuante que será posicionado sobre o fragmento com o fragmento escurecido fora do fragmento.
Para a caixa de diálogo personalizada, eu tenho um linearLayout que possui bordas curvas, não importa o que eu faça, a caixa de diálogo tem uma borda preta em todos os lados (muito pequena). Eu tentei de tudo para torná-lo transparente e desaparecer (para que todo o diálogo seja apenas o layout linear - caixa curva)
Para o DialogFragment, é isso que eu tenho para onCreateView
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
LinearLayout layout =(LinearLayout)inflater.inflate(R.layout.custom_dialog, null);
LinearLayout item = (LinearLayout)layout.findViewById(R.id.display_item);
populateItemData(item, inflater);
return layout;
}
custom_dialog é apenas um LinearLayout que tem android: backgroung definido como # 000000
Este é o meu estilo para o diálogo personalizado
<style name="CustomDialog" parent="android:style/Theme.Dialog">
<item name="android:windowBackground">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:alwaysDrawnWithCache">false</item>
<item name="android:windowContentOverlay">@null</item>
</style>
Eu tentei todos os tipos de combinações neste estilo (pelo que vi online) e não consigo me livrar daquela borda preta irritante, posso pintá-la de branco ou de qualquer outra cor se definir o fundo LinearLayout para qualquer outra coisa que não # 000000 ...
Eu gastei literalmente 3-4 horas nisso, espero que alguém possa ajudar ...
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window android.app.Dialog.getWindow()' on a null object reference
.getDialog().getWindow().setBackgroundDrawableResource(android.R.color.transparent);
vez disso. Para não invocar uma exceção, você deve chamar um métodoDialogFragment
from Activity ou FragmentdialogFragment.show(...);
, não FragmentTransaction'sadd
.dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
.Tente isto ( como eu crio um DialogFragment 100% personalizado ) este trabalho para o diálogo
fonte
Defina o seu tema assim funcionou para mim
E em seu fragmento de diálogo definido assim
fonte
No
onActivityCreated
para
DialogFragment
transparentefonte
Para uso completamente transparente: setStyle (DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
Para o plano de fundo personalizado -crie um arquivo de estilo em sua pasta de valores (values / style.xml) e use-o: setStyle (DialogFragment.STYLE_NO_FRAME, yourpackagename.R.style.YOURE_CUSTOM_STYLE);
em seu arquivo de estilo, substitua o atributo: android: windowBackground para ser @ color / DialogBackgroundBlackSemiTransparent
fonte
Você pode conseguir, adicionando isso em Fragmento de diálogo ou BottomSheetDialogFragment
No
onCreateDialog
Métodofonte
setBackgroundDrawableResource
eclearFlags
funciona para mim (kotlin, android api v28)fonte
Aqueles que estão usando o construtor AlertDialog em
onCreateDialog
vez deonCreateView
podem atribuir um tema como o código a seguir. Conjunto completo de temas pode ser encontrado em R.style . Não se esqueça de que alguns deles são suportados recentemente e não estão disponíveis em aparelhos antigos.fonte
Experimente se você gosta de:
fonte
Por resposta aceita, em Kotlin
fonte