Caixa de diálogo em tela cheia


164

Estou tentando mostrar um DialogFragment quase em tela cheia. Mas de alguma forma eu não sou capaz de fazê-lo.

A maneira como mostro o fragmento é diretamente da documentação do desenvolvedor do Android

FragmentManager f = ((Activity)getContext()).getFragmentManager();
FragmentTransaction ft = f.beginTransaction();
Fragment prev = f.findFragmentByTag("dialog");
if (prev != null) {
    ft.remove(prev);
}
ft.addToBackStack(null);

// Create and show the dialog.
DialogFragment newFragment = new DetailsDialogFragment();
newFragment.show(ft, "dialog");

Eu sei que ingenuamente tentei definir o RelativeLayout no fragmento para fill_parent e alguns minWidth e minHeight.

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"  
    android:minWidth="1000px" 
    android:minHeight="600px"
    android:background="#ff0000">

Eu esperaria que o DialogFragment ocupasse a maior parte da tela. Mas eu só parece redimensionar verticalmente, mas apenas até uma largura fixa horizontal.

Também tentei definir os atributos da janela no código, conforme sugerido aqui: http://groups.google.com/group/android-developers/browse_thread/thread/f0bb813f643604ec . Mas isso também não ajudou.

Provavelmente estou entendendo algo errado sobre como o Android lida com os Diálogos, pois sou novo nele. Como posso fazer algo assim? Existem maneiras alternativas de alcançar meu objetivo?


Dispositivo Android:
Asus EeePad Transformer
Android 3.0.1


Atualização: agora consegui colocá-lo em tela cheia, com o seguinte código no fragmento

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(STYLE_NO_FRAME, android.R.style.Theme_Holo_Light);
}

Infelizmente, isso não é exatamente o que eu quero. Definitivamente, preciso de um pequeno "preenchimento" ao redor da caixa de diálogo para mostrar o plano de fundo.

Alguma idéia de como fazer isso?



Você economiza meu tempo, tysm
— Arul Mani

Respostas:


73

Tente mudar para um em LinearLayoutvez de RelativeLayout. Eu estava alvejando a API 3.0 do Honeycomb ao testar.

public class FragmentDialog extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button button = (Button) findViewById(R.id.show);
    button.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            showDialog();
        }
    });
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
}

void showDialog() {
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    DialogFragment newFragment = MyDialogFragment.newInstance();
    newFragment.show(ft, "dialog");
}

public static class MyDialogFragment extends DialogFragment {

    static MyDialogFragment newInstance() {
        MyDialogFragment f = new MyDialogFragment();
        return f;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_dialog, container, false);
        return v;
    }

}
}

e os layouts : fragment_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:minWidth="1000dp"  
    android:minHeight="1000dp"> 
 </LinearLayout> 

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"
    android:background="#ffffff">
    <Button android:id="@+id/show"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:text="show">
    </Button>
</LinearLayout>

E, para mim, eu precisava usar um RelativeLayout, mas a largura da caixa de diálogo não estava se ajustando adequadamente ao conteúdo, então aninhei o RelativeLayout em um LinearLayout cujo único filho era o RelativeLayout ... isso acionou os ajustes de largura adequados.
— precisa

1
Testei tudo, mas posso confirmar que a única coisa que funcionou no meu DialogFragment foi agrupar todo o meu layout em um LinearLayout. Dessa forma, eu poderia definir a largura e altura das minhas (agora envolto) layout original da ... horas desperdiçadas neste
— Até

6
Definir minWidth e minHeight como algo grande parece ser a parte crucial; mas isso é um truque em vez de uma solução limpa. A resposta dada por @ David abaixo - explicada mais adiante no link que ele fornece - também funciona e é limpa.
— Garlef Wegart

@ tir38 Acho que não é verdade, porque onCreateDialog () já tem uma implementação na superclasse.
— starkej2

Essa deve ser a resposta aceita. Elaborado e claro
— mutiemule

179

Para obter o DialogFragment em tela cheia

Substitua onStartseu DialogFragment assim:

@Override
public void onStart()
{
    super.onStart();
    Dialog dialog = getDialog();
    if (dialog != null)
    {
        int width = ViewGroup.LayoutParams.MATCH_PARENT;
        int height = ViewGroup.LayoutParams.MATCH_PARENT;
        dialog.getWindow().setLayout(width, height);
    }
}

E muito obrigado a este post: O mistério dos andróides, fragmentos de diálogo em tela cheia


6
Exatamente isso funciona, mas eu tentei com o Videoview e não funciona para isso. A barra de status ainda é exibida. Portanto, isso me corrigiu abaixo do código: dialog.getWindow (). SetFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
— WhiteHorse

1
finalmente resolva, obrigado por sugestão @ David
— Ashu Kumar

1
Isso funcionou muito bem para mim. Eu usei ViewGroup.LayoutParams.WRAP_CONTENTpara a altura. Obrigado.
— atordoado

1
este é limpo e não-hacky
— rommex

7
isso não está funcionando para o meu caso .. mostrando algum preenchimento de todos os cantos. qualquer ajuda?
— Abdul Waheed 23/11

144
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setStyle(DialogFragment.STYLE_NORMAL,
             android.R.style.Theme_Black_NoTitleBar_Fullscreen);
}

7
A única solução que parecia funcionar para mim. Outros estavam trabalhando às vezes, às vezes não. Vamos esperar que eu não encontrar uma exceção a esta um também :)
— azertiti

12
Se você quiser que o plano de fundo seja transparente, use '' 'android.R.style.Theme_Translucent_NoTitleBar' ''
— acntwww

2
A chave está passando STYLE_NORMAL. Isso faz com que a caixa de diálogo preencha a tela como qualquer outra atividade. Nós podemos usar qualquer tema. Para o design do material, você pode derivar um tema do material (por exemplo, Theme.AppCompat.NoActionBar que mantém a decoração do sistema, mas remove a barra de ação).
— Rpattabi

2
Ha-ha, quando lancei, uma tela preta apareceu e pensei que estivesse congelada. Então mudei um tema para Theme_Light_NoTitleBar_Fullscreen. Obrigado, uma caixa de diálogo ocupa uma tela inteira (incluindo uma barra de status).
— precisa saber é o seguinte

1
Theme_DeviceDefault_Light_NoActionBar_Fullscreen envia uma caixa de diálogo com fundo branco.
— Hitesh Sahu

45

De acordo com este link, o DialogFragment em tela cheia mostra estofamento nos lados. Isso funcionará como um encanto.

@Override
public Dialog onCreateDialog(final Bundle savedInstanceState) {

    // the content
    final RelativeLayout root = new RelativeLayout(getActivity());
    root.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

    // creating the fullscreen dialog
    final Dialog dialog = new Dialog(getActivity());
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(root);
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

    return dialog;
}

4
Funciona muito bem, mesmo em 2018! (nada mais fez) Obrigado.
— AutonomousApps

2
Esta é a resposta perfeita, mesmo no Android Studio 3.1+ em 2018, melhor do que outras respostas aqui. A outra resposta vontade quebrou o UI android como cardview, girador, etc.
— Taufik Nur Rahmanda

1
Funciona encantadoramente em 2020!
— Yue Yin

Funciona, mas se você deseja definir margens no seu layout XML, terá que agrupar suas visualizações com outro layout, caso contrário, as margens serão ignoradas.
— Felipe Ribeiro R. Magalhães

29

Crie um DialogFragment em tela cheia usando apenas o estilo

Primeira solução

1. Adicione ao seu style.xml:

    <style name="FullScreenDialog" parent="Theme.AppCompat.Light.Dialog">
        <item name="android:backgroundDimEnabled">false</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:padding">0dp</item>
        <item name="android:windowIsFloating">false</item>
        <item name="android:windowBackground">@android:color/transparent</item>
    </style>

2. Adicione ao seu DialogFragment:

@Override
public int getTheme() {
    return R.style.FullScreenDialog;
}

Solução alternativa

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    setStyle(DialogFragment.STYLE_NO_FRAME, R.style.AppTheme)
}

onde AppThemeé o tema que você definiu em estilos.


Esta é a maneira mais elegante do que a resposta de Bradley4.
— MeLine 26/01

solução de uma linha perfeita
— me_

Ambas as soluções funcionaram, mas a primeira causou um erro no pop-up da área de transferência. Alternativa funciona bem
— Janusz Hain

18

No meu caso, usei a seguinte abordagem:

    @Override
    public void onStart() {
        super.onStart();
        getDialog().getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    }
}

Além disso, LinearLayout para preencher todo o espaço com conteúdo.

Mas ainda havia pequenas lacunas entre as bordas esquerda e direita da caixa de diálogo e as bordas da tela em alguns dispositivos Lollipop + (por exemplo, Nexus 9).

Não era óbvio, mas finalmente descobri que, para torná-lo em largura total em todos os dispositivos e plataformas , o plano de fundo da janela deve ser especificado dentro de styles.xml, como o seguinte:

<style name="Dialog.NoTitle" parent="Theme.AppCompat.Dialog">
    <item name="android:windowNoTitle">true</item>
    <item name="android:padding">0dp</item>
    <item name="android:windowBackground">@color/window_bg</item>
</style>

E é claro que esse estilo precisa ser usado quando criamos a caixa de diálogo da seguinte maneira:

    public static DialogFragment createNoTitleDlg() {
        DialogFragment frag = new Some_Dialog_Frag();
        frag.setStyle(DialogFragment.STYLE_NO_TITLE, R.style.Dialog_NoTitle);
        return frag;
}

Essa é a resposta. Funciona bem.
— VonSchnauzer 28/11

2
Tentei a maioria das respostas neste tópico, algumas funcionaram, mas perdi todos os meus estilos de temas compatíveis com aplicativos. Eu esperava que este funcionasse como tema principal era AppCompat. É quase funcionou. Para mim, eu tive que adicionar 2 estilos adicionais: <item name="android:windowFullscreen">true</item> <item name="android:windowIsFloating">false</item> Fonte: TechRepublic
— Breeno 11/17/17

15

Eu já conheci o problema antes ao usar um dialogFragment em tela cheia: sempre há um preenchimento ao definir a tela inteira. tente este código no método onActivityCreated () do dialogFragment:

public void onActivityCreated(Bundle savedInstanceState)
{   
    super.onActivityCreated(savedInstanceState);
    Window window = getDialog().getWindow();
    LayoutParams attributes = window.getAttributes();
    //must setBackgroundDrawable(TRANSPARENT) in onActivityCreated()
    window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    if (needFullScreen)
    {
        window.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    }
}

Funciona, outras soluções mudam o tema dos botões e outros elementos do fragmento.
— Yhondri 12/08/19

11

Na atualização da API do Android, o método sugerido para mostrar uma caixa de diálogo em tela cheia é o seguinte:

FragmentTransaction transaction = this.mFragmentManager.beginTransaction();
// For a little polish, specify a transition animation
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
// To make it fullscreen, use the 'content' root view as the container
// for the fragment, which is always the root view for the activity
transaction.add(android.R.id.content, this.mFragmentToShow).commit();

caso contrário, se você não quiser que ele seja exibido em tela cheia, faça o seguinte:

this.mFragmentToShow.show(this.mFragmentManager, LOGTAG);

Espero que ajude.

EDITAR

Esteja ciente de que a solução que eu dei funciona, mas tem uma fraqueza que às vezes pode ser problemática. Adicionar o DialogFragment ao android.R.id.contentcontêiner não permitirá que você lide com o DialogFragment#setCancelable()recurso corretamente e pode levar a comportamentos inesperados ao adicionar o próprio DialogFragment à pilha traseira.

Então, eu sugeri que você alterasse o estilo do seu DialogFragment no método onCreate da seguinte maneira:

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Translucent_NoTitleBar);
}

Espero que ajude.


1
Concordo. Aqui está uma explicação completa do guia do desenvolvedor do Android: link
— user2274431

10

Tente usar setStyle () em onCreate e substitua onCreateDialog make dialog without title

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);    
    setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme);        
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog dialog = super.onCreateDialog(savedInstanceState);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);        
    return dialog;
}

ou simplesmente substitua onCreate () e setStyle pelo código.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);    
    setStyle(DialogFragment.STYLE_NO_TITLE, android.R.style.Theme);        
}

8

De fato, isso depende de como o layout é definido. Mas, para garantir que a caixa de diálogo obtenha o tamanho necessário, a melhor solução é fornecer os LayoutParams assim que a caixa de diálogo for exibida (e não na criação). Em um DialogFragment, a caixa de diálogo é mostrada no método onStart , portanto, um método válido para obter largura total é:

@Override public void onStart() {
    super.onStart();
    Dialog d = getDialog();
    if (d!=null){
        d.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
    }
}

Para também fornecer um tema ou estilo, como um estilo NO_TITLE, a melhor localização é no método onCreate :

@Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(STYLE_NO_TITLE, android.R.style.Theme_Holo_Light_Dialog);
}

6

Nota: Mesmo um pode encontrar a resposta correta aqui. Mas quero esclarecer uma confusão.

Use o código abaixo para android.app.DialogFragment

@Override
public void onStart()
{
    super.onStart();
    Dialog dialog = getDialog();
    if (dialog != null)
    {
        int width = ViewGroup.LayoutParams.MATCH_PARENT;
        int height = ViewGroup.LayoutParams.MATCH_PARENT;
        dialog.getWindow().setLayout(width, height);
    }
}

Use o código abaixo para android.support.v4.app.DialogFragment

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Black_NoTitleBar_Fullscreen);
}

6

E a versão kotlin!

override fun onStart() {
    super.onStart()
    dialog?.let {
        val width = ViewGroup.LayoutParams.MATCH_PARENT
        val height = ViewGroup.LayoutParams.MATCH_PARENT
        it.window?.setLayout(width, height)
    }
}

1
Realmente funciona! Também quero adicionar, o desenvolvedor deve agrupar o conteúdo da caixa de diálogo por FrameLayout transparente, para evitar a deformação do conteúdo.
— Georgiy Chebotarev

4

Esta é a solução que eu descobri esse problema:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog dialog = super.onCreateDialog(savedInstanceState);    
    dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);   

    return dialog;
}

@Override
public void onStart() {
    super.onStart();
    Dialog dialog = getDialog();
    if (dialog != null) {
            dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
            dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    }
}

3

Crie o tema abaixo em seu style.xml:

<style name="DialogTheme" parent="Theme.AppCompat.Light.DarkActionBar">
   <item name="android:paddingRight">0dp</item>
   <item name="android:paddingLeft">0dp</item>
   <item name="android:layout_width">match_parent</item>
   <item name="android:windowNoTitle">true</item>
</style>

depois defina o estilo em DialogFragment

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NO_TITLE, R.style.DialogTheme);
}

2

Chirag Nagariya está certo, exceto a adição '_Fullscreen'. pode ser resolvido usando qualquer estilo de base que não seja derivado do estilo de Diálogo. O 'android.R.style.Theme_Black_NoTitleBar' também pode ser usado.


1

Caso alguém se depare com isso, tive uma experiência semelhante a essa, mas o problema é que esqueci de retornar a exibição inflada do onCreateView (retornando o super.onCreateView padrão). Eu simplesmente retornei a visão inflada correta e isso resolveu o problema.


1
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog dialog = new Dialog(getActivity(), android.R.style.Theme_Holo_Light);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

    return dialog;
}

Esta solução aplica um tema de tela cheia na caixa de diálogo, semelhante ao setStyle de Chirag no onCreate. Uma desvantagem é que SavedInstanceState não é usado.


1

Tente isso para o diálogo de fragmento comum para vários usos. Espero que isso ajude você a apostar

public class DialogFragment extends DialogFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_visit_history_main, container, false);

        getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        initializeUI(rootView);
        return rootView;
    }

    @Override
    public void onStart() {
        super.onStart();
        Dialog dialog = getDialog();
        if (dialog != null) {
            int width = ViewGroup.LayoutParams.MATCH_PARENT;
            int height = ViewGroup.LayoutParams.MATCH_PARENT;
            dialog.getWindow().setLayout(width, height);
        }
    }
    private void initializeUI(View rootView) {
    //getChildFragmentManager().beginTransaction().replace(R.id.fv_container,FragmentVisitHistory.getInstance(), AppConstant.FRAGMENT_VISIT_HISTORY).commit();
    }
}


1

É isso que você precisa definir para fragmentar:

/* theme is optional, I am using leanback... */
setStyle(STYLE_NORMAL, R.style.AppTheme_Leanback);

No seu caso:

DialogFragment newFragment = new DetailsDialogFragment();
newFragment.setStyle(STYLE_NORMAL, R.style.AppTheme_Leanback);
newFragment.show(ft, "dialog");

E porque? Como o DialogFragment (quando não informado explicitamente), usará seus estilos internos que envolverão seu layout personalizado (sem tela cheia etc.).

E layout? Nenhuma maneira hacky necessária, isso está funcionando muito bem:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    ...
</RelativeLayout>

Aproveitar


1

Estou muito atrasado para responder a essa pergunta e ainda quero compartilhar essa resposta para que no futuro alguém possa usá-la.

Eu usei esse código no meu projeto, ele funciona na versão inferior e na versão superior.

Basta usar este tema dentro de onCreateDialog () assim:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_pump_details, null);

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), android.R.style.Theme_Black_NoTitleBar_Fullscreen);
    return builder.create();
}

android.R.style.Theme_Black_NoTitleBar_Fullscreen - Aqui está o código-fonte para este tema, você pode ver apenas esse tema é suficiente para fazer o DialogFragment aparecer em tela cheia.

<!-- Variant of {@link #Theme_Black} that has no title bar and
     no status bar.  This theme
     sets {@link android.R.attr#windowFullscreen} to true.  -->
<style name="Theme.Black.NoTitleBar.Fullscreen">
    <item name="windowFullscreen">true</item>
    <item name="windowContentOverlay">@null</item>
</style>

Entre em contato se alguém enfrentar algum problema. Espero que isso seja útil. Obrigado :)


a caixa de diálogo é exibida em tela cheia, mas tudo ficou preto, exceto um botão. qualquer ideia ??
— Sagar Nayak

1

A maneira a seguir funcionará mesmo se você estiver trabalhando em um layout relativo. Siga os seguintes passos:

  1. Vá para o editor de temas (disponível em Ferramentas-> Android -> Editor de temas )
  2. Selecione mostrar todos os temas. Selecione aquele com AppCompat.Dialog
  3. Escolha a opção android window background se quiser que seja de um fundo colorido específico ou transparente.
  4. Selecione a cor e pressione OK. Selecione um nome para o novo tema.
  5. Vá para styles.xml e, abaixo do tema adicionado, adicione estes dois atributos:

    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">false</item>

Minha configuração de tema para a caixa de diálogo é a seguinte:

<style name="DialogTheme" parent="Theme.AppCompat.Dialog" >
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">match_parent</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">false</item>

Certifique-se de que o tema tenha um pai como Theme.AppCompat.Dialog. Outra maneira seria criar um novo estilo em styles.xml e alterá-lo conforme o código acima.

  1. Vá para a classe Fragmento de Diálogo e no onCreate () método , defina o estilo do Dialog como:

    @Override public void onCreate (@Nullable Bundle savedInstanceState) {super.onCreate (savedInstanceState); setStyle (DialogFragment.STYLE_NORMAL, R.style.DialogTheme); }


1

Adicione isso abaixo das linhas no estilo da caixa de diálogo de tela cheia.

<item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowIsFloating">false</item>

ou: substitua diversão onCreate (savedInstanceState: Bundle?) {super.onCreate (savedInstanceState) setStyle (DialogFragment.STYLE_NORMAL, R.style.BottomSheetDialogThemeNoFloating) <nome do estilo = "BottomSheetDialogThemeNoFloating" parent ". nome do item = "android: windowIsFloating"> false </item> </style>
— Filipkowicz 6/04

0

window.setLayout não é suficiente para dispositivos mais antigos.

Aqui está o que eu faço:

try {
    ViewGroup parent = (ViewGroup) view;
    do {
        parent = (ViewGroup) parent.getParent();
        if (parent == null)
            break;

        parent.getLayoutParams().height = ViewGroup.LayoutParams.MATCH_PARENT;
        parent.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
        parent.requestLayout();
    } while (true);
} catch (Exception e){}

0
This below answer works for me in fragment dialog.  


  Dialog dialog = getDialog();
        if (dialog != null)
        {
            int width = ViewGroup.LayoutParams.MATCH_PARENT;
            int height = ViewGroup.LayoutParams.MATCH_PARENT;
            dialog.getWindow().setLayout(width, height);
        }

0

Uma solução usando o novo ConstraintLayouté agrupar o ConstraintLayoutem um LinearLayoutcom minHeight e minWidth corrigidos. Sem o agrupamento, o ConstraintLayout não está obtendo o tamanho certo para o Diálogo.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minWidth="1000dp"
    android:minHeight="1000dp"
    android:orientation="vertical">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/background_color"
        android:orientation="vertical">
        <!-- some constrained views -->
    </androidx.constraintlayout.widget.ConstraintLayout>

</LinearLayout>

0

Trabalhou para mim em Kotlin,

 override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)

    dialog?.window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)

}

0

a seguinte solução funcionou para mim outra solução me deu algum espaço nas laterais ou seja, não em tela cheia

Você precisa fazer alterações nos métodos onStart e onCreate

@Override
public void onStart() {
    super.onStart();
    Dialog dialog = getDialog();
    if (dialog != null)
    {
        int width = ViewGroup.LayoutParams.MATCH_PARENT;
        int height = ViewGroup.LayoutParams.MATCH_PARENT;
        dialog.getWindow().setLayout(width, height);
    }
}


 public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
    final Dialog dialog = new Dialog(requireContext());
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
 }


   
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.