Я пытаюсь показать почти полноэкранный DialogFragment. Но я как-то не в состоянии это сделать.
То, как я показываю фрагмент, прямо из документации разработчика 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");
Я знаю, наивно пытался установить RelativeLayout во фрагменте для fill_parent и некоторых minWidth и 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">
Я знаю, ожидать, что DialogFragment заполнит большую часть экрана. Но я только изменяю размеры по вертикали, но только до некоторой фиксированной ширины по горизонтали.
Я также попытался установить атрибуты окна в коде, как предложено здесь: http://groups.google.com/group/android-developers/browse_thread/thread/f0bb813f643604ec . Но это тоже не помогло.
Я, вероятно, неправильно понимаю что-то о том, как Android обрабатывает диалоги, так как я новичок в этом. Как я могу сделать что-то подобное? Есть ли альтернативные способы достижения моей цели?
Android-устройство:
Asus EeePad Transformer
Android 3.0.1
Обновление: теперь мне удалось получить его в полноэкранном режиме со следующим кодом во фрагменте
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(STYLE_NO_FRAME, android.R.style.Theme_Holo_Light);
}
К сожалению, этого не совсем хочется, хочу. Я определенно нуждаюсь в небольшом отступе вокруг диалога, чтобы показать фон.
Есть идеи, как этого добиться?
Ответы:
Попробуйте переключиться на
LinearLayout
вместоRelativeLayout
. Я тестировал 3.0 Honeycomb API при тестировании.и макеты : фрагмент_диалог.xml
main.xml
источник
Вывести DialogFragment на весь экран
Переопределите
onStart
ваш DialogFragment следующим образом:И большое спасибо за этот пост: тайны андроидов-полноэкранные диалоги-фрагменты
источник
ViewGroup.LayoutParams.WRAP_CONTENT
для высоты. Спасибо.источник
По этой ссылке DialogFragment в полноэкранном режиме показывает отступы по бокам, это будет работать как шарм.
источник
Сделайте полноэкранный DialogFragment, используя только стиль
Первое решение
** 1. Добавьте к своему `style.xml`: **2. Добавьте в свой DialogFragment:
Альтернативное решение
источник
В моем случае я использовал следующий подход:
Плюс LinearLayout, чтобы заполнить все пространство контентом.
Но на некоторых устройствах Lollipop + (например, Nexus 9) все еще были небольшие промежутки между левым и правым краями диалога и краями экрана.
Это было неочевидно, но в конце концов я понял, что для обеспечения его полной ширины на всех устройствах и платформах фон окна должен быть указан внутри styles.xml, как показано ниже:
И, конечно, этот стиль необходимо использовать при создании диалога, подобного следующему:
источник
<item name="android:windowFullscreen">true</item> <item name="android:windowIsFloating">false</item>
Источник: TechRepublicЯ сталкивался с этой проблемой раньше, когда использовал полноэкранный dialogFragment: всегда есть заполнение при настройке полноэкранного режима. попробуйте этот код в методе onActivityCreated () dialogFragment:
источник
Начиная с обновления Android API, предлагаемый способ отображения полноэкранного диалогового окна заключается в следующем:
в противном случае, если вы не хотите, чтобы он отображался в полноэкранном режиме, вы можете сделать это следующим образом:
Надеюсь, поможет.
РЕДАКТИРОВАТЬ
Знайте, что решение, которое я дал, работает, но имеет слабость, которая иногда может быть неприятной. Добавление DialogFragment в
android.R.id.content
контейнер не позволит вам правильно обрабатывать этуDialogFragment#setCancelable()
функцию и может привести к неожиданным действиям при добавлении самого DialogFragment в задний стек.Поэтому я предложил вам просто изменить стиль вашего DialogFragment в методе onCreate следующим образом:
Надеюсь, поможет.
источник
Попробуйте использовать setStyle () в onCreate и переопределить onCreateDialog сделать диалог без заголовка
или просто переопределите onCreate () и setStyle вместе с кодом.
источник
Это может действительно зависеть от того, как определен макет. Но чтобы гарантировать, что диалоговое окно приобретает требуемый размер, наилучшим решением является предоставление LayoutParams, как только диалоговое окно отображается (а не при создании). В DialogFragment диалоговое окно отображается для метода onStart , поэтому допустимый метод для получения полной ширины:
Чтобы также предоставить тему или стиль, например стиль NO_TITLE, наилучшее расположение находится в методе onCreate :
источник
Примечание : Даже здесь можно найти правильный ответ. Но я хочу уточнить путаницу.
Используйте ниже код для
android.app.DialogFragment
Используйте ниже код для
android.support.v4.app.DialogFragment
источник
И версия котлин!
источник
Вот решение, как я понял эту проблему:
источник
Создайте тему ниже в вашем style.xml:
затем установите стиль в DialogFragment
источник
Чираг Нагария прав, кроме дополнения «_Fullscreen». это может быть решено с использованием любого базового стиля, который не является производным от стиля диалога. 'android.R.style.Theme_Black_NoTitleBar' также может быть использован.
источник
В случае, если кто-то еще сталкивался с этим, у меня был подобный опыт, но оказалось, что проблема заключалась в том, что я забыл вернуть раздутое представление из onCreateView (вместо этого возвращая стандартный super.onCreateView). Я просто вернул правильное раздутое представление, и это решило проблему.
источник
Это решение применяет полноэкранную тему в диалоге, которая похожа на setStyle Чирага в onCreate. Недостатком является то, что saveInstanceState не используется.
источник
Попробуйте это для общего диалога фрагмента для многократного использования. Надеюсь, это поможет вам
источник
Вот что вам нужно установить для фрагмента:
В твоем случае:
И почему? Потому что DialogFragment (если не указано явно), будет использовать свои внутренние стили, которые обернут в него ваш пользовательский макет (без полноэкранного режима и т. Д.).
А макет? Хакерский путь не нужен, это работает просто отлично:
наслаждаться
источник
Я очень поздно отвечаю на этот вопрос, но хочу поделиться этим ответом, чтобы в будущем любой мог его использовать.
Я использовал этот код в своем проекте, он работает как в более низкой версии, так и в более высокой версии.
Просто используйте эту тему внутри onCreateDialog () следующим образом:
android.R.style.Theme_Black_NoTitleBar_Fullscreen - Вот исходный код этой темы, вы можете увидеть, что только этой темы достаточно, чтобы DialogFragment отображался в полноэкранном режиме.
Пожалуйста, дайте мне знать, если кто-то сталкивается с любой проблемой. Надеюсь, это полезно. Спасибо :)
источник
Следующий способ будет работать, даже если вы работаете с относительным макетом. Выполните следующие шаги:
Перейдите к styles.xml и затем в только что добавленной теме добавьте эти два атрибута:
Моя настройка темы для диалога:
Убедитесь, что у темы есть родительский объект под названием Theme.AppCompat.Dialog. Другим способом было бы просто создать новый стиль в styles.xml и изменить его в соответствии с приведенным выше кодом.
Перейдите в свой класс фрагмента диалога и в onCreate () установите стиль своего диалога как:
@Override public void onCreate (@Nullable Bundle saveInstanceState) {super.onCreate (saveInstanceState); SetStyle (DialogFragment.STYLE_NORMAL, R.style.DialogTheme); }
источник
Добавьте следующие строки в стиле полноэкранного диалога.
источник
window.setLayout
недостаточно для старых устройств.Вот что я делаю:
источник
источник
Решение с использованием нового
ConstraintLayout
заключается в обёртыванииConstraintLayout
вLinearLayout
с фиксированными minHeight и minWidth. Без упаковки ConstraintLayout не получает правильный размер для диалога.источник
Работал для меня в Котлине,
источник
следующее решение сработало для меня, другое решение дало мне некоторое пространство по бокам, т.е. не на весь экран
Вам нужно внести изменения в метод onStart и onCreate
источник