Повноекранний діалоговий фрагмент в 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.