Полноэкранный диалог 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);
Ответы
Ответ 1
это идеально для меня. при расширении Диалоговое окно
переопределить 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;
}
Ответ 2
попробуйте переключиться на RelativeLayout вместо LinearLayout. Он работал в моем случае
Ответ 3
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NO_TITLE,android.R.style.Theme_Holo_Light);
}
Ответ 4
этот ответ помогите мне
Как установить ширину и высоту DialogFragment?
int width = activity.getResources().getDisplayMetrics().widthPixels;
int height = activity.getResources().getDisplayMetrics().heightPixels;
content.setLayoutParams(new LinearLayout.LayoutParams(width, height));
Ответ 5
Лучшее решение, которое я нашел, это установить ширину или minWidth на какое-то сколь угодно большое значение, чтобы обеспечить заполнение экрана. Мне не нравится это решение, но я не видел ничего лучшего.
Ответ 6
В моем коде я хотел получить полноэкранное диалоговое окно, но все равно покажу панель уведомлений в верхней части экрана, поэтому я использую:
setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Black_NoTitleBar);
Это делает его полноэкранным, но я не использую полноэкранный стиль, поэтому я сохраняю панель уведомлений.
Надеюсь, это поможет кому-то!
Ответ 7
Вы также можете сделать что-то вроде
@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
Ответ 8
Я ответил на этот вопрос с объяснением, это самый короткий и эффективный способ. Пожалуйста, проверьте В этом потоке
Надеюсь, что это поможет:)
Ответ 9
В диалоговом режиме "Диалог" работает. В 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;
}
Ответ 10
Чтобы иметь полноэкранный диалог, вам нужно использовать
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");