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

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

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

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

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

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

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

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

Вы можете добавить эти значения в свой стиль 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> 

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

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

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

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

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

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

 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> 

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

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

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

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

Этот ответ является обходным путем для тех, кто использует «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», поэтому здесь я делаю фоновый фон окна нулевым.

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

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

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

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