web-dev-qa-db-fra.com

Plein écran DialogFragment

J'essaie de créer un DialogFragment avec une largeur de MATCH_PARENT afin que la boîte de dialogue soit presque en plein écran (laissant le remplissage sur les bords pour l'aspect flottant). J'ai vu cette solution Full Screen DialogFragment dans Android mais j'essaie d'éviter le bidouillage de la définition de la largeur à 1000dp. Avec ma mise en page actuelle, que j'utilise FILL_PARENT ou MATCH_PARENT, il semble que la largeur et la hauteur soient définies sur WRAP_CONTENT.

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical" >

J'ai utilisé cette solution pour Dialog (pas DialogFragment) et cela fonctionne comme prévu:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
20
invertigo

c'est parfait pour moi. when s'étend DialogFragment remplace onCreateView()... applique toute la logique

dialogue rendre plein écran juste remplacer cette méthode 

 @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.YELLOW));
    dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

    return dialog;
}
37
Attif

essayez de passer à RelativeLayout au lieu de LinearLayout. Cela a fonctionné dans mon cas

21
atermenji
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(DialogFragment.STYLE_NO_TITLE,Android.R.style.Theme_Holo_Light);
}
8
evya

cette réponse m'aidez Comment définir la largeur et la hauteur de DialogFragment?

int width = activity.getResources().getDisplayMetrics().widthPixels;
int height = activity.getResources().getDisplayMetrics().heightPixels;
content.setLayoutParams(new LinearLayout.LayoutParams(width, height));
3
Danylo.Vus

La meilleure solution que j'ai trouvée consistait à définir la largeur ou minWidth sur une valeur arbitrairement grande pour qu'elle remplisse l'écran. Je n'aime pas cette solution, mais je n'ai rien vu de mieux.

2
invertigo

J'ai répondu à cette question avec des explications, c'est le moyen le plus court et le plus efficace. S'il vous plaît vérifier Dans ce fil

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

1
Biswajit

Dans mon code, je voulais une boîte de dialogue plein écran, mais je vis toujours la barre de notification en haut de l'écran, donc j'utilise:

setStyle(DialogFragment.STYLE_NORMAL, Android.R.style.Theme_Black_NoTitleBar);

Cela le rend plein écran, mais je n'utilise pas un style plein écran pour que je garde la barre de notification. 

J'espère que ça aide quelqu'un!

1
LukeWaggoner

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);

  }

Grâce à cela, vous pourrez également voir la barre d'état colorée pour les versions> = Lollipop

1
Vaibhav Sharma

Pour avoir une boîte de dialogue en plein écran, vous devez utiliser 

public class CustomDialogFragment extends DialogFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        // Inflate the layout to use as dialog or embedded fragment
        return inflater.inflate(R.layout.purchase_items, container, false);
    }


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

Et pour montrer ce dialogue:

CustomDialogFragment newFragment = new CustomDialogFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
// To make it fullscreen, use the 'content' root view as the container
// for the fragment, which is always the root view for the activity
fragmentManager.beginTransaction().add(Android.R.id.content, newFragment).commit();

ATTENTION: Vous ne pouvez pas utiliser le code suivant pour afficher la boîte de dialogue. Sinon, la boîte de dialogue sera affichée au centre de l'écran et non en plein écran. 

//don't show dialog like this
newFragment.show(fragmentManager, "dialog");
0
loic

Sur DialogFragment travaux suivants. Dans onCreateView() ajouter ce qui suit

getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); 

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    //…
    getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    //…
    return view;
}
0
Sattar Hummatli