По словам разработчиков платформы Android Дайан Hackborn в этой группе посте обсуждения, Диалоги установить ширину макета верхнего уровня их окна и высоту WRAP_CONTENT
. Чтобы сделать диалог больше, вы можете установить эти параметры на MATCH_PARENT
.
Демо-код:
AlertDialog.Builder adb = new AlertDialog.Builder(this);
Dialog d = adb.setView(new View(this)).create();
// (That new View is just there to have something inside the dialog that can grow big enough to cover the whole screen.)
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(d.getWindow().getAttributes());
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.MATCH_PARENT;
d.show();
d.getWindow().setAttributes(lp);
Обратите внимание, что атрибуты устанавливаются после отображения диалога. Система привередлива к тому, когда они установлены. (Я предполагаю, что механизм компоновки должен установить их при первом показе диалога или что-то в этом роде.)
Было бы лучше сделать это, расширив Theme.Dialog, тогда вам не придется играть в догадки о том, когда вызывать setAttributes. (Хотя это немного сложнее, чтобы диалоговое окно автоматически приняло соответствующую светлую или темную тему или тему Honeycomb Holo. Это можно сделать в соответствии с http://developer.android.com/guide/topics/ui/themes. html # SelectATheme )
Попробуйте обернуть свой собственный диалог
RelativeLayout
вместоLinearLayout
. Это сработало для меня.источник
Указание FILL_PARENT в диалоговом окне, как предлагали другие, у меня не сработало (на Android 4.0.4), потому что оно просто растягивало черный фон диалога, чтобы заполнить весь экран.
Что хорошо работает, так это использование минимального отображаемого значения, но указание его в коде, чтобы диалог занимал 90% экрана.
Так:
В общем, в большинстве случаев достаточно регулировки ширины.
источник
Установите
android:minWidth
иandroid:minHeight
в своем пользовательском представлении XML. Это может заставить предупреждение не просто переносить размер контента. Использование вида, подобного этому, должно сделать это:источник
Еще проще просто сделать это:
источник
onCreate
после поворота устройства. В этом случае мы не можем полагаться на ширину / высоту чего-либо в макете, потому что это еще не было создано; но физическая ширина / высота устройства все еще доступны.ViewGroup.LayoutParams.WRAP_CONTENT
качестве одного из параметровисточник
FILL_PARENT
шириной, рассчитанной как 90% ширины текущего дисплея. Но мне нравится ответ, потому что он легче, чем другие.Все остальные ответы здесь имеют смысл, но они не отвечают требованиям Фабиана. Вот мое решение. Возможно, это не идеальное решение, но оно работает для меня. Он показывает диалоговое окно в полноэкранном режиме, но вы можете указать отступ сверху, снизу, слева или справа.
Как видите, у меня есть android: paddingTop = 20dp - в основном то, что вам нужно. Андроид: windowBackground = @ цвет / Black0Percent только цветовой код объявлен на моем color.xml
Этот Цветовой код просто служит фиктивным, чтобы заменить фон окна Диалога по умолчанию цветом прозрачности 0%.
Наконец, вот наш диалог, который устанавливает пользовательское представление, которое использует наш dialog.xml:
Заключение: я попытался переопределить тему диалога в файле styles.xml с именем CustomDialog. Он переопределяет макет окна диалога и дает мне возможность установить отступы и изменить непрозрачность фона. Возможно, это не идеальное решение, но я надеюсь, что оно поможет вам .. :)
источник
DialogFragment
) приходит, когда вы делаете:Dialog customDialog = new Dialog(context, STYLE);
спасибо, ДЕЙСТВИТЕЛЬНО, спасибо.Вы можете использовать процент для (ПРОСТО) ширины диалогового окна.
Посмотрите на этот пример из Holo Theme:
Все, что вам нужно сделать, это расширить эту тему и изменить значения для «Major» и «Minor» на 90% вместо 65%.
С уважением.
источник
Следующее работало хорошо для меня:
(примечание: windowMinWidthMajor / Minor, как предлагалось в предыдущих ответах, не помогло. Мои диалоговые окна постоянно меняли размеры в зависимости от содержимого)
а потом:
источник
Решение с фактическим расчетом 90%:
где
getScreenWidth(Activity activity)
определяется следующее (лучше всего использовать в классе Utils):источник
Получить ширину устройства:
затем использовать это для создания диалога 90% устройства,
источник
Ну, вы должны установить высоту и ширину вашего диалога, прежде чем показать это (dialog.show ())
Итак, сделайте что-то вроде этого:
источник
Безусловно самый простой способ, которым я могу думать -
Если ваш диалог сделан из вертикальной LinearLayout, просто добавьте фиктивный вид «заполнение по высоте», который будет занимать всю высоту экрана.
Например -
Обратите внимание на
android:weightSum="1"
атрибуты в LinearLayout и атрибутыandroid:layout_weight="1"
в фиктивном представлении.источник
Ну, вы должны установить высоту и ширину вашего диалога, прежде чем показать это (dialog.show ())
Итак, сделайте что-то вроде этого:
Получив этот код, я внес в него некоторые изменения:
однако размер диалога может измениться, когда устройство изменит свою позицию. Возможно, вам придется справиться самостоятельно, когда метрики изменятся. PD: peekDecorView, подразумевает, что макет в действии правильно инициализирован, в противном случае вы можете использовать
чтобы получить размер экрана
источник
После инициализации объекта диалога и настройки просмотра содержимого. Делай это и наслаждайся.
(в случае, если я устанавливаю 90% для ширины и 70% для высоты, потому что ширина 90% будет над панелью инструментов)
источник
Мой ответ основан на комах, но он не требует переопределения onStart, а только onCreateView, который почти всегда переопределяется по умолчанию при создании новых фрагментов.
Я проверял это на Android 5.0.1.
источник
Вот мой вариант для ширины настраиваемого диалога:
Так что в зависимости от ориентации устройства (
ThemeHelper.isPortrait(mContext)
) ширина диалогового окна будет либо 95% (для портретного режима), либо 65% (для альбомной ). Это немного больше, что спросил автор, но это может быть полезно для кого-то.Вам нужно создать класс, который выходит из Dialog, и поместить этот код в свой
onCreate(Bundle savedInstanceState)
метод.Для высоты диалога код должен быть похож на этот.
источник
ThemeHelper
? У меня нет этого класса в моем проекте.ThemeHelper
это просто вспомогательный класс для моих нужд. Его методisPortrait(Context)
возвращает ориентацию экрана устройства - книжную или альбомную.источник
Выше многие ответы хороши, но ни один из них не сработал для меня полностью. Поэтому я объединил ответ от @nmr и получил этот.
источник
источник
Если вы используете макет ограничения , вы можете установить любое представление внутри него, чтобы заполнить процент экрана:
layout_constraintWidth_percent = "0.8"
Так, например, если у вас есть ScrollView внутри диалога, и вы хотите установить его в процентах от высоты экрана. Это было бы так:
Надеюсь, это поможет кому-то !!
источник
Просто дайте AlertDialog эту тему
источник
Вам необходимо использовать style @ style.xml, например CustomDialog, для отображения настраиваемого диалогового окна.
и использовать этот стиль в Activity.java, как это
и ваш custom_dialog.xml должен находиться внутри вашего каталога макета
источник
Вот короткий ответ, который работал для меня (проверено на API 8 и API 19).
источник
источник
источник