web-dev-qa-db-fra.com

Android: Comment avoir dialogFragment en plein écran

Bonjour, j'ai essayé de remplacer le thème par dialogFragment pour le plein écran, mais l'écran complet que je voulais était une superposition au-dessus de l'activité précédente. Ainsi, lorsque le dialogFragment est ouvert, nous pouvons toujours voir l'activité en arrière du remplissage entre l'écran et le dialogFragment. .

C'est le style que j'ai utilisé pour le plein écran

<style name="fullscreen_dialog" parent="Android:Theme" >
    <item name="Android:windowNoTitle">true</item>
    <item name="Android:windowFullscreen">true</item>
    <item name="Android:windowIsFloating">false</item>
</style>
10
LittleFunny

Vous pouvez simplement définir manuellement les paramètres de mise en page dans le code. J'espère que ça aide ! :) Vérifiez également ceci SO Réglage de la taille de la boîte de dialogue personnalisée sous Android

Window window = myDialog.getWindow();
window.setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
0
Doug Ray

Voici la solution que j'ai trouvée pour gérer votre problème:

@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));
        }
    }
40
droidev

La solution ci-dessous a parfaitement fonctionné pour moi.

Créez un style pour le dialogue de fragments comme ci-dessous:

<style name="dialog_theme" parent="Android:Theme" >
    <item name="Android:windowNoTitle">true</item>
    <item name="Android:windowIsFloating">false</item>
</style>

Créez votre classe Java comme ci-dessous:

public class FiltersDialogFragment extends Android.support.v4.app.DialogFragment {

    static FiltersDialogFragment newInstance() {
        FiltersDialogFragment fragment = new FiltersDialogFragment();
        return fragment;
    }

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

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

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

Bonne codage !!!

12
Ahsanwarsi

Vous pouvez aussi faire quelque chose comme-

@Override
  public void onCreate(@Nullable final Bundle savedInstanceState) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
      setStyle(STYLE_NO_TITLE, Android.R.style.Theme_Material_Light_NoActionBar_Fullscreen);
    } else {
      setStyle(STYLE_NO_TITLE, Android.R.style.Theme_DeviceDefault_Light_NoActionBar);
    }
    super.onCreate(savedInstanceState);

  }
6
Vaibhav Sharma

Ci-dessous ma solution.

<style name="Dialog.App" parent="Theme.AppCompat.Dialog"></style>
<style name="Dialog.App.Fullscreen">
    <item name="Android:windowActionBar">false</item>
    <item name="Android:windowNoTitle">true</item>
    <item name="Android:windowContentOverlay">@null</item>
    <item name="Android:colorBackground">@null</item>
    <item name="Android:colorBackgroundCacheHint">@null</item>
    <item name="Android:windowFrame">@null</item>
    <item name="Android:windowBackground">@null</item>

    <!--the key attribute for fullscreen dialog -->
    <item name="Android:windowIsFloating">false</item>

    <!-- only width fill screen -->
    <!--<item name="Android:windowMinWidthMajor">100%</item>-->
    <!--<item name="Android:windowMinWidthMinor">100%</item>-->
</style>
3
ggaier

Il existe une méthode pour changer le style et le thème.

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

Je l'ai testé pour obtenir le plein écran et cela fonctionne très bien avec une disposition simple.

1
arenaq
    getDialog().getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    getDialog().getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
1
dinus

Si rien de ce qui précède ne fonctionne (comme ce ne fut pas le cas pour moi), consultez le Guide des dialogues de développeur Android pour plus d'informations sur la procédure à suivre.

public void showDialog() {
    FragmentManager fragmentManager = getSupportFragmentManager();
    CustomDialogFragment newFragment = new CustomDialogFragment();

    if (mIsLargeLayout) {
        // The device is using a large layout, so show the fragment as a dialog
        newFragment.show(fragmentManager, "dialog");
    } else {
        // The device is smaller, so show the fragment fullscreen
        FragmentTransaction transaction = fragmentManager.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, newFragment)
                   .addToBackStack(null).commit();
    }
}

Si, comme moi, votre barre d'action est toujours affichée après avoir utilisé la stratégie ci-dessus, vous devrez définir des indicateurs sur l'interface utilisateur .

private fun hideSystemUI() {
    // Enables regular immersive mode.
    // For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE.
    // Or for "sticky immersive," replace it with SYSTEM_UI_FLAG_IMMERSIVE_STICKY
    window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_IMMERSIVE
            // Set the content to appear under the system bars so that the
            // content doesn't resize when the system bars hide and show.
            or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            // Hide the nav bar and status bar
            or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            or View.SYSTEM_UI_FLAG_FULLSCREEN)
}
0
airowe

J'ai répondu à cette question avec des explications 

Dans ce fil

J'espère que cela t'aides :)

0
Biswajit

FWIW, je devais mettre en place un style spécial sous-classé à @ style/Base.Theme.AppCompat.Light. Sinon, aucun des champs de la bibliothèque de support ne semblait correct. Si vous utilisez @ style/Base.Theme.AppCompat.Light.Dialog, cela crée cette apparence flottante que je ne voulais pas.

0
kenyee