Полный диалог DialogFragment

Я пытаюсь создать DialogFragment с шириной MATCH_PARENT, так что диалог почти полный экран (оставляя прокладку по краям для плавающего вида). Я видел это решение Full Screen DialogFragment в Android, но пытаюсь избежать взлома установки ширины до 1000 дп. В моем текущем макете, использую ли я FILL_PARENT или MATCH_PARENT, он, кажется, устанавливает ширину и высоту 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" > 

Я использовал это решение для Dialog (не DialogFragment) и работает как ожидалось:

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

Solutions Collecting From Web of "Полный диалог DialogFragment"

Это идеально для меня. Когда extends DialogFragment переопределяет onCreateView() … вызывает все логические

Диалоговое окно, чтобы включить полноэкранный режим

  @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; } 

Попробуйте переключиться на RelativeLayout вместо LinearLayout. Он работал в моем случае

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

Этот ответ поможет мне Как установить ширину и высоту DialogFragment?

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

Лучшее решение, которое я нашел, – установить ширину или minWidth на какое-то сколь угодно большое значение, чтобы обеспечить заполнение экрана. Мне не нравится это решение, но я не видел ничего лучшего.

В моем коде мне не хватало полноэкранного диалога, но все равно показываю панель уведомлений в верхней части экрана, поэтому я использую:

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

Это делает его полноэкранным, но я не использую полноэкранный стиль, поэтому я сохраняю панель уведомлений.

Надеюсь, это поможет кому-то!

Вы также можете сделать что-то вроде:

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

Благодаря этому вы также сможете увидеть строку состояния, окрашенную для версий> = lollipop

На DialogFragment после работ. В onCreateView() добавить следующее

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

Чтобы иметь полноэкранный диалог, вам нужно использовать

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

И чтобы показать это диалоговое окно:

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

ВНИМАНИЕ : вы не можете использовать следующий код для отображения диалога, если нет, диалог будет показан в центре экрана, а не во весь экран.

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

Я ответил на этот вопрос с объяснением, это самый короткий и эффективный способ. Пожалуйста, проверьте эту тему

Надеюсь это поможет 🙂