Я использую действие с установленной темой диалога и хочу, чтобы оно было полноэкранным. Я пробовал все, даже через WindowManager, чтобы вручную развернуть окно до полной ширины и высоты, но ничего не работает.
Очевидно, диалоговое окно (или действие с темой диалога) будет расширяться только в соответствии с его содержимым, но даже это не всегда работает. Например, я показываю кружок индикатора выполнения, ширина и высота которого установлены на FILL_PARENT (как и его контейнер макета), но все же диалоговое окно обтекает гораздо меньший индикатор выполнения, а не заполняет экран.
Должен быть способ отобразить что-то маленькое внутри диалогового окна, но должно ли оно расширяться до полного размера экрана без изменения размера его содержимого?
источник
Ответы:
Я нашел решение:
В своей деятельности, для которой
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()
, иначе ничего не получится.источник
import android.view.ViewGroup.LayoutParams;
Вы можете добавить эти значения в свой стиль 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>
источник
Я просто хочу заполнить только 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
источник
Оберните свой dialog_custom_layout.xml в RelativeLayout вместо любого другого макета. У меня это сработало.
источник
Для диалога Это может быть полезно для кого-то. Я хочу, чтобы диалоговое окно занимало всю ширину экрана. много искал, но ничего полезного не нашел. Наконец, это сработало для меня:
mDialog.setContentView(R.layout.my_custom_dialog); mDialog.getWindow().setBackgroundDrawable(null);
после добавления мой диалог появляется во всю ширину экрана.
источник
Этот ответ - обходной путь для тех, кто использует 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", поэтому здесь я устанавливаю фон окна равным нулю.
источник
Установите минимальную ширину в самом верхнем макете.
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"/>
На этом все, программно вызывать методы не нужно.
источник
В вашем файле манифеста, где определена наша деятельность
<activity android:name=".YourPopUpActivity" android:theme="@android:style/Theme.Holo.Dialog" > </activity>
без панели действий
<activity android:name=".YourPopUpActivity" android:theme="@android:style/Theme.Holo.Dialog.NoActionBar"/>
источник