Повноекранний діалоговий фрагмент в Android


165

Я намагаюся показати майже повноекранний діалоговий фрагмент. Але я якось не в змозі цього зробити.

Те, як я показую Фрагмент, прямо з документації для розробників 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 заповнить більшість екрану. Але я, здається, змінюю розмір вертикально, але тільки до деякої фіксованої ширини по горизонталі.

Я також намагався встановити атрибути Window у коді, як тут запропоновано: 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);
}

На жаль, це не зовсім так, як я хочу. Мені напевно потрібна невелика «підкладка» навколо діалогового вікна, щоб показати фон.

Будь-які ідеї, як це досягти?


2
добре прочитати: techrepublic.com/article / ...
— kouretinho

Ви економите мій час, тисм
— Мані

Відповіді:


73

Спробуйте перейти на LinearLayoutзамість RelativeLayout. Під час тестування я орієнтувався на верхівку 3,0 соти.

public class FragmentDialog extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button button = (Button) findViewById(R.id.show);
    button.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            showDialog();
        }
    });
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
}

void showDialog() {
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    DialogFragment newFragment = MyDialogFragment.newInstance();
    newFragment.show(ft, "dialog");
}

public static class MyDialogFragment extends DialogFragment {

    static MyDialogFragment newInstance() {
        MyDialogFragment f = new MyDialogFragment();
        return f;
    }

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

}
}

та макети : fragment_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:minWidth="1000dp"  
    android:minHeight="1000dp"> 
 </LinearLayout> 

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"
    android:background="#ffffff">
    <Button android:id="@+id/show"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:text="show">
    </Button>
</LinearLayout>

І для мене мені потрібно було використовувати RelativeLayout, але ширина діалогу не була належним чином пристосована до вмісту, тому я вклав RelativeLayout у LinearLayout, єдиною дитиною якого був RelativeLayout ... це ініціювало правильне регулювання ширини.
— Пітер Айтай

1
Я все перевірив, але можу підтвердити, що єдине, що працювало на моєму DialogFragment - це загортання всього мого плану в LinearLayout. Таким чином я міг встановити ширину та висоту свого (тепер обгорнутого) оригінального макета ... витрачав на це години
— до

6
Налаштування minWidth та minHeight на деяку велику, здається, є найважливішою частиною; але це злом замість чистого розчину. Відповідь, подана нижче @David нижче - далі пояснюється у посиланні, яке він дає - також працює і є чистою.
— Гарлеф Вегарт

@ tir38 Я не думаю, що це правда, тому що onCreateDialog () вже має реалізацію в суперкласі.
— starkej2

Це має бути прийнятою відповіддю. Розробити і зрозуміло
— mutiemule

179

Щоб отримати DialogFragment на весь екран

Замініть onStartсвій діалоговий фрагмент так:

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

І велике спасибі за цей пост: таємниця-андроїди-повний екран-діалог-фрагменти


6
Саме це працює, але я спробував з Videoview, і це не працює для цього. StatusBar все ще відображається. Отже, це зафіксувало мене нижче коду: dialog.getWindow (). SetFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
— WhiteHorse

1
нарешті розібратися, thansk для пропозиції @David
— Ашу Кумар

1
Це добре працювало для мене. Я використовував ViewGroup.LayoutParams.WRAP_CONTENTдля висоти. Дякую.
— запаморочив

1
це чисто і не хакі,
— rommex

7
це не працює для мого випадку .. він показує деякий прокладки з усіх куточків. будь-яка допомога?
— Абдул Вахід

144
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setStyle(DialogFragment.STYLE_NORMAL,
             android.R.style.Theme_Black_NoTitleBar_Fullscreen);
}

7
Єдине рішення, яке, здавалося, працює для мене. Інші інколи працювали, іноді ні. Будемо сподіватися, що я теж не знайду винятку з цього :)
— azertiti

12
Це працює і для мене. Якщо ви хочете, щоб фон був прозорим, ви повинні використовувати '' 'android.R.style.Theme_Translucent_NoTitleBar' ''
— acntwww

2
Ключ проходить STYLE_NORMAL. Це робить діалогове вікно для заповнення екрана так само, як і будь-яке інше дійство. Ми можемо використовувати будь-яку тему. Для дизайну матеріалів можна отримати матеріальну тему (наприклад, Theme.AppCompat.NoActionBar, яка зберігає декор системи, але видаляє панель дій).
— rpattabi

2
Ха-ха, коли я запустив, з’явився чорний екран, і я подумав, що він замерз. Потім я змінив тему на Theme_Light_NoTitleBar_Fullscreen. Дякуємо, діалогове вікно займає весь екран (включаючи панель стану).
— CoolMind

1
Діалогове вікно Theme_DeviceDefault_Light_NoActionBar_Fullscreen з білим тлом.
— Хітеш Саху

45

Відповідно до цього посилання на повноекранному екрані DialogFragment видно накладки з боків, це буде працювати як шарм.

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

    return dialog;
}

4
Чудово працює навіть у 2018 році! (нічого більше не робив) Спасибі
— AutonomousApps

2
Це ідеальна відповідь навіть в Android Studio 3.1+ 2018 року, краще, ніж інші відповіді. Інша відповідь зламає інтерфейс Android, як-от перегляд карт, спінер та ін.
— Taufik Nur Rahmanda,

1
Працює чарівно у 2020 році!
— Юе Інь

Працює, але якщо ви хочете визначити поля у вашій макеті XML, вам доведеться обгорнути свої подання іншим макетом, інакше поля будуть ігноровані.
— Феліпе Рібейро Р. Магалхаес

30

Зробіть діалоговий фрагмент на весь екран, використовуючи лише стиль

Перше рішення

1. Додайте до свого style.xml:

    <style name="FullScreenDialog" parent="Theme.AppCompat.Light.Dialog">
        <item name="android:backgroundDimEnabled">false</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:padding">0dp</item>
        <item name="android:windowIsFloating">false</item>
        <item name="android:windowBackground">@android:color/transparent</item>
    </style>

2. Додайте до свого DialogFragment:

@Override
public int getTheme() {
    return R.style.FullScreenDialog;
}

Альтернативне рішення

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    setStyle(DialogFragment.STYLE_NO_FRAME, R.style.AppTheme)
}

де AppThemeтема, яку ви визначили у стилях.


Це більш елегантний спосіб, ніж відповідь bradley4.
— MeLine

ідеальне рішення для однієї лінії
— я_

Обидва рішення спрацювали, але перше викликало помилку із спливаючим буфером обміну. Альтернатива працює чудово
— Януш Хайн

18

У моєму випадку я застосував такий підхід:

    @Override
    public void onStart() {
        super.onStart();
        getDialog().getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    }
}

Плюс LinearLayout, щоб заповнити весь простір вмістом.

Але між лівим і правим краями діалогового вікна та краями екрану на деяких пристроях Lollipop + (наприклад, Nexus 9) залишилися невеликі зазори .

Це було не очевидно, але, нарешті, я зрозумів, що щоб зробити його на повну ширину на всіх пристроях та платформах, фон вікна повинен бути вказаний у стилях.xml, як описано нижче:

<style name="Dialog.NoTitle" parent="Theme.AppCompat.Dialog">
    <item name="android:windowNoTitle">true</item>
    <item name="android:padding">0dp</item>
    <item name="android:windowBackground">@color/window_bg</item>
</style>

І звичайно, цей стиль потрібно використовувати, коли ми створюємо діалогове вікно, наприклад:

    public static DialogFragment createNoTitleDlg() {
        DialogFragment frag = new Some_Dialog_Frag();
        frag.setStyle(DialogFragment.STYLE_NO_TITLE, R.style.Dialog_NoTitle);
        return frag;
}

Це відповідь. Чудово працює.
— VonSchnauzer

2
Я спробував більшість відповідей на цю тему, деякі спрацювали, але я втратив усі стилі тем для комп’ютерних програм. Я сподівався, що ця робота працюватиме як батьківська тема - AppCompat. Це майже спрацювало. Для мене мені довелося додати 2 додаткові стилі: <item name="android:windowFullscreen">true</item> <item name="android:windowIsFloating">false</item> Джерело: TechRepublic
— Breeno

15

Я раніше зустрічався з проблемою, коли користувався діалоговим екраном на повноекранному екрані. спробуйте цей код у методі onActivityCreate () діалога:

public void onActivityCreated(Bundle savedInstanceState)
{   
    super.onActivityCreated(savedInstanceState);
    Window window = getDialog().getWindow();
    LayoutParams attributes = window.getAttributes();
    //must setBackgroundDrawable(TRANSPARENT) in onActivityCreated()
    window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    if (needFullScreen)
    {
        window.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    }
}

Це працює, інші рішення змінюють тему кнопок та інших елементів фрагмента.
— Йондрі

11

Що стосується оновлення API для Android, пропонований спосіб відобразити діалогове вікно на весь екран:

FragmentTransaction transaction = this.mFragmentManager.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, this.mFragmentToShow).commit();

в іншому випадку, якщо ви не хочете, щоб він відображався на повноекранному екрані, ви можете зробити це так:

this.mFragmentToShow.show(this.mFragmentManager, LOGTAG);

Сподіваюся, це допомагає.

EDIT

Будьте в курсі, що рішення, яке я дав, працює, але має слабкість, яка іноді може бути проблемою. Додавання DialogFragment до android.R.id.contentконтейнера не дозволить вам правильно поводитися з DialogFragment#setCancelable()функцією і може призвести до несподіваної поведінки при додаванні самого DialogFragment до заднього стеку.

Тому я запропонував би вам просто змінити стиль свого DialogFragment у методі onCreate наступним чином:

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

Сподіваюся, це допомагає.


1
Я згоден. Ось повне пояснення з посібника для розробників Android: посилання
— користувач2274431

10

Спробуйте використати setStyle () у onCreate та перекрийте діалогове вікно onCreateDialog make без заголовка

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

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

або просто переосмислити onCreate () і встановити код колеги.

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

8

Це дійсно може залежати від того, як визначено макет. Але для того, щоб діалог набув потрібного розміру, найкращим рішенням є надання LayoutParams, коли діалогове вікно буде показано (а не у створенні). У діалоговому фрагменті діалогове вікно відображається методом onStart , тому правильним методом отримання повної ширини є:

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

Щоб також надати тему чи стиль, як стиль NO_TITLE, найкраще розташуватись у методі onCreate :

@Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(STYLE_NO_TITLE, android.R.style.Theme_Holo_Light_Dialog);
}

7

Примітка. Навіть тут можна знайти правильну відповідь. Але я хочу уточнити плутанину.

Використовуйте код нижче для android.app.DialogFragment

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

Використовуйте код нижче для android.support.v4.app.DialogFragment

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

6

І котлін версія!

override fun onStart() {
    super.onStart()
    dialog?.let {
        val width = ViewGroup.LayoutParams.MATCH_PARENT
        val height = ViewGroup.LayoutParams.MATCH_PARENT
        it.window?.setLayout(width, height)
    }
}

1
Це справді працює! Також хочу додати, розробник повинен обертати контент діалогу прозорим FrameLayout, щоб уникнути деформації вмісту.
— Георгій Чеботарьов

4

Це рішення, як я з'ясував це питання:

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

3

Створіть нижче тему у вашому style.xml:

<style name="DialogTheme" parent="Theme.AppCompat.Light.DarkActionBar">
   <item name="android:paddingRight">0dp</item>
   <item name="android:paddingLeft">0dp</item>
   <item name="android:layout_width">match_parent</item>
   <item name="android:windowNoTitle">true</item>
</style>

потім встановіть стиль у DialogFragment

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

2

Чираг Нагарія правий, окрім доповнення "Повний екран". це можна вирішити, використовуючи будь-який базовий стиль, який не випливає із діалогового стилю. "android.R.style.Theme_Black_NoTitleBar" також може бути використаний.


1

У випадку, якщо хтось інший стикається з цим, у мене був подібний досвід до цього, але виявляється, що проблема полягала в тому, що я забув повернути завищений вигляд з onCreateView (замість цього повернувши за замовчуванням super.onCreateView). Я просто повернув правильний завищений погляд, і це вирішило проблему.


1
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog dialog = new Dialog(getActivity(), android.R.style.Theme_Holo_Light);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

    return dialog;
}

Це рішення застосовує тему на весь екран у діалоговому вікні, яка схожа на setStyle Chirag у onCreate. Недоліком є ​​те, що saveInstanceState не використовується.


1

Спробуйте це для діалогу загального фрагмента для кількох застосувань. Сподіваюсь, це допоможе вам беттору

public class DialogFragment extends DialogFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_visit_history_main, container, false);

        getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        initializeUI(rootView);
        return rootView;
    }

    @Override
    public void onStart() {
        super.onStart();
        Dialog dialog = getDialog();
        if (dialog != null) {
            int width = ViewGroup.LayoutParams.MATCH_PARENT;
            int height = ViewGroup.LayoutParams.MATCH_PARENT;
            dialog.getWindow().setLayout(width, height);
        }
    }
    private void initializeUI(View rootView) {
    //getChildFragmentManager().beginTransaction().replace(R.id.fv_container,FragmentVisitHistory.getInstance(), AppConstant.FRAGMENT_VISIT_HISTORY).commit();
    }
}

зверніться до цього питання - stackoverflow.com/questions/45494644/…
— Аман Верма

1

Це те, що потрібно встановити на фрагмент:

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

У вашому випадку:

DialogFragment newFragment = new DetailsDialogFragment();
newFragment.setStyle(STYLE_NORMAL, R.style.AppTheme_Leanback);
newFragment.show(ft, "dialog");

І чому? Оскільки DialogFragment (коли не буде сказано прямо), він буде використовувати свої внутрішні стилі, які будуть обертати в ньому ваш власний макет (без повноекранного екрана тощо).

А макет? Не потрібен гакітний шлях, це працює чудово:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    ...
</RelativeLayout>

Насолоджуйтесь


1

Я дуже запізнююсь відповісти на це запитання, все ж хочу поділитися цією відповіддю, щоб у майбутньому хтось міг цим скористатися.

Я використовував цей код у своєму проекті, він працює як у нижчій, так і у вищій версії.

Просто використовуйте цю тему в onCreateDialog (), як це:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_pump_details, null);

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), android.R.style.Theme_Black_NoTitleBar_Fullscreen);
    return builder.create();
}

android.R.style.Theme_Black_NoTitleBar_Fullscreen - Ось вихідний код цієї теми. Ви можете побачити лише цієї теми, щоб DialogFragment з'явився на повноекранному екрані.

<!-- Variant of {@link #Theme_Black} that has no title bar and
     no status bar.  This theme
     sets {@link android.R.attr#windowFullscreen} to true.  -->
<style name="Theme.Black.NoTitleBar.Fullscreen">
    <item name="windowFullscreen">true</item>
    <item name="windowContentOverlay">@null</item>
</style>

Будь ласка, дайте мені знати, якщо хтось стикається з будь-яким питанням. Сподіваюся, що це корисно. Дякую :)


Діалогове вікно відкривається на повноекранний екран, але все стає чорним, крім кнопки. будь-яка ідея ??
— Сагар Наяк

1

Наступний спосіб буде працювати, навіть якщо ви працюєте на відносному макеті. Виконайте наступні дії:

  1. Перейдіть до редактора тем (доступний у розділі Інструменти-> Android -> Редактор тем)
  2. Виберіть Показати всі теми. Виберіть його за допомогою AppCompat.Dialog
  3. Виберіть варіант андроїдного фону вікна, якщо ви хочете, щоб він був будь-якого конкретного кольорового фону або прозорого.
  4. Виберіть колір і натисніть OK. Виберіть назву нової теми.
  5. Перейдіть до styles.xml, а потім у щойно додану тему додайте ці два атрибути:

    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">false</item>

Моя настройка теми для діалогового вікна наведена нижче:

<style name="DialogTheme" parent="Theme.AppCompat.Dialog" >
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">match_parent</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">false</item>

Переконайтеся, що тема має батьківського типу Theme.AppCompat.Dialog Ще одним способом буде просто створити новий стиль у styles.xml та змінити його відповідно до наведеного вище коду.

  1. Перейдіть до класу «Діалог фрагментів» і в методі onCreate () встановіть стиль діалогового вікна як:

    @Override public void onCreate (@Nullable Bundle savedInstanceState) {super.onCreate (збереженийInstanceState); setStyle (DialogFragment.STYLE_NORMAL, R.style.DialogTheme); }


1

Додайте це нижче рядків у стилі повного екранного діалогового вікна.

<item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowIsFloating">false</item>

або: переосмислити забаву onCreate (зберігсяInstanceState: Пакет?) {super.onCreate (збереженийInstanceState) setStyle (DialogFragment.STYLE_NORMAL, R.style.BottomSheetDialogThemeNoFloating) <стиль імені = "BottomSheetDialogThemeNoFlomeThemeNoFloetheoNetFlome" name name = "android: windowIsFloating"> false </item> </style>
— Filipkowicz

0

window.setLayout недостатньо для старих пристроїв.

Ось що я роблю:

try {
    ViewGroup parent = (ViewGroup) view;
    do {
        parent = (ViewGroup) parent.getParent();
        if (parent == null)
            break;

        parent.getLayoutParams().height = ViewGroup.LayoutParams.MATCH_PARENT;
        parent.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
        parent.requestLayout();
    } while (true);
} catch (Exception e){}

0
This below answer works for me in fragment dialog.  


  Dialog dialog = getDialog();
        if (dialog != null)
        {
            int width = ViewGroup.LayoutParams.MATCH_PARENT;
            int height = ViewGroup.LayoutParams.MATCH_PARENT;
            dialog.getWindow().setLayout(width, height);
        }

0

Рішенням за допомогою нового ConstraintLayoutє загортання ConstraintLayoutв LinearLayoutзафіксовану minHeight та minWidth. Без обгортання ConstraintLayout не отримує потрібного розміру для діалогового вікна.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minWidth="1000dp"
    android:minHeight="1000dp"
    android:orientation="vertical">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/background_color"
        android:orientation="vertical">
        <!-- some constrained views -->
    </androidx.constraintlayout.widget.ConstraintLayout>

</LinearLayout>

0

Працював для мене в Котліні,

 override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)

    dialog?.window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)

}

0

наступне рішення працювало для мене інше рішення дало мені трохи місця в сторонах, тобто не на повний екран

Потрібно внести зміни в метод onStart і onCreate

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


 public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
    final Dialog dialog = new Dialog(requireContext());
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
 }


   
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.