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

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

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

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

Ответ 1

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

В вашей деятельности, которая имеет стиль стиля 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(), иначе это не сработает.

Ответ 2

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

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

Ответ 3

Я просто хочу заполнить только 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 (..)

спасибо @Matthias

Ответ 4

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

Ответ 5

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

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

после добавления этого, мой диалог появляется на полной ширине экрана.

Ответ 6

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

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>

Ответ 7

Ответ Маттиаса в основном прав, но он все еще не заполняет весь экран, так как он имеет небольшую прокладку с каждой стороны (отмечен @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" />

Ответ 8

Этот ответ является обходным решением для тех, кто использует "Theme.AppCompat.Dialog" или любой другой "Theme.AppCompat.Dialog" потомков, например "Theme.AppCompat.Light.Dialog", "Тема .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", поэтому здесь я делаю фон фона нулевым.

Ответ 9

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

<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"/>

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

Ответ 10

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

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

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

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