Как я могу получить окно активности стиля Диалог, чтобы заполнить экран?
Я использую действие с установленной темой диалога и хочу, чтобы оно было полноэкранным. Я пробовал все виды вещей, даже проходя через WindowManager, чтобы вручную расширить окно до полной ширины и высоты, но ничего не работает.
Очевидно, диалоговое окно (или действие с темой диалога) будет расширяться только в соответствии с его содержимым, но даже это не всегда работает. Например, я показываю круг индикатора выполнения, для которого ширина и высота установлены равными FILL_PARENT (как и его контейнер макета), но, тем не менее, диалог оборачивается вокруг гораздо меньшего индикатора выполнения вместо заполнения экрана.
Должен быть способ отображать что-то маленькое внутри диалогового окна, но разве это должно быть расширено до полного размера экрана без изменения размера контента?
10 ответов
Я нашел решение:
В вашей деятельности, которая имеет 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()
иначе это не сработает.
Вы можете добавить эти значения в свой стиль 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>
Минимальная ширина окна должна быть вдоль малой оси экрана.
Я просто хочу заполнить только 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", поэтому здесь я делаю фон окна нулевым.
Ответ Матиаса в основном правильный, но он все еще не заполняет весь экран, так как с каждой стороны имеет небольшой отступ (на что указывает @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" />
Установите минимальную ширину в верхней части макета.
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>
Это было бы полезно для таких, как я. Создать собственный стиль диалога:
<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"/>