Как я могу получить окно активности стиля Диалог, чтобы заполнить экран? - PullRequest
132 голосов
/ 01 сентября 2009

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

Очевидно, диалоговое окно (или действие с темой диалога) будет расширяться только в соответствии с его содержимым, но даже это не всегда работает. Например, я показываю круг индикатора выполнения, который имеет ширину и высоту, равные FILL_PARENT (как и его контейнер макета), но, тем не менее, диалог оборачивается вокруг гораздо меньшего индикатора выполнения вместо заполнения экрана.

Должен быть способ отображать что-то маленькое внутри диалогового окна, но можно ли его развернуть до полного размера экрана без изменения размера контента?

Ответы [ 10 ]

305 голосов
/ 07 ноября 2009

Я нашел решение:

В своей деятельности, для которой установлен стиль Theme.Dialog, сделайте следующее:

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

    setContentView(R.layout.your_layout);

    getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
}

Важно, чтобы вы звонили Window.setLayout() после вы звоните setContentView(), иначе это не сработает.

56 голосов
/ 02 октября 2014

Вы можете добавить эти значения в свой стиль android: windowMinWidthMajor и android: windowMinWidthMinor

<style name="Theme_Dialog" parent="android:Theme.Holo.Dialog">
    ...
    <item name="android:windowMinWidthMajor">96%</item>
    <item name="android:windowMinWidthMinor">96%</item>
</style>

Минимально допустимая ширина окна вдоль малой оси экрана.

50 голосов
/ 23 декабря 2013

Я просто хочу заполнить только 80% экрана для того, что я сделал, как это ниже

        DisplayMetrics metrics = getResources().getDisplayMetrics();
        int screenWidth = (int) (metrics.widthPixels * 0.80);

        setContentView(R.layout.mylayout);

        getWindow().setLayout(screenWidth, LayoutParams.WRAP_CONTENT); //set below the setContentview

это работает только когда я помещаю строку getwindow (). SetLayout ... ниже setContentView (..)

спасибо @ Матиас

11 голосов
/ 23 сентября 2016

Оберните ваш dialog_custom_layout.xml в RelativeLayout вместо любого другого макета. Это сработало для меня.

8 голосов
/ 24 августа 2015

Для диалога Это может быть полезно для кого-то. Я хочу, чтобы диалог занимал всю ширину экрана. много искал но ничего полезного не нашел. Наконец это сработало для меня:

mDialog.setContentView(R.layout.my_custom_dialog);
mDialog.getWindow().setBackgroundDrawable(null);

после добавления этого диалоговое окно появляется на всю ширину экрана.

2 голосов
/ 20 сентября 2016

Этот ответ - обходной путь для тех, кто использует «Theme.AppCompat.Dialog» или любых других потомков «Theme.AppCompat.Dialog» , например «Theme.AppCompat.Light.Dialog», «Theme. AppCompat.DayNight.Dialog "и др. Я сам должен использовать диалог AppCompat, потому что я использую AppCompatActivity, как расширяет для всех моих действий. Будет проблема, из-за которой диалоговое окно будет заполнено со всех сторон (сверху, справа, снизу и слева), если мы используем принятый ответ.

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

    setContentView(R.layout.your_layout);

    getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
}

В стиле вашей деятельности добавьте этот код

<style name="DialogActivityTheme" parent="Theme.AppCompat.Dialog">
    <item name="windowNoTitle">true</item>
    <item name="android:windowBackground">@null</item>
</style>

Как вы можете заметить, проблема, которая генерирует заполнение для нашего диалога, это "android: windowBackground", поэтому здесь я делаю фон окна нулевым.

2 голосов
/ 16 августа 2015

Ответ Матиаса в основном правильный, но он все еще не заполняет весь экран, так как имеет небольшие отступы с каждой стороны (на что указывает @Holmes). В дополнение к его коду мы могли бы исправить это, расширив стиль Theme.Dialog и добавив некоторые атрибуты, подобные этому.

<style name="MyDialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowNoTitle">true</item>
</style>

Затем мы просто объявляем Activity с темой, установленной на MyDialog:

<activity
    android:name=".FooActivity"
    android:theme="@style/MyDialog" />
2 голосов
/ 18 апреля 2013

Установите минимальную ширину в самом верхнем макете.

android:minWidth="300dp"

Например:

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

<!-- Put remaining contents here -->

</LinearLayout>
1 голос
/ 11 сентября 2016

Это было бы полезно для таких, как я. Создать собственный стиль диалога:

<style name="MyDialog" parent="Theme.AppCompat.Light.Dialog">
    <item name="windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowIsFloating">false</item>
</style>

В AndroidManifest.xml тема набора файлов для требуемой активности:

<activity
        android:name=".CustomDialog"
        ...
        android:theme="@style/MyDialog"/>

Вот и все, не нужно вызывать методы программно.

0 голосов
/ 12 июля 2017

В вашем файле манифеста, где определяется наша деятельность

<activity
        android:name=".YourPopUpActivity"
        android:theme="@android:style/Theme.Holo.Dialog" >
    </activity>

без панели действий

<activity android:name=".YourPopUpActivity"
            android:theme="@android:style/Theme.Holo.Dialog.NoActionBar"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...