Як зробити так, щоб діалогове вікно сповіщення заповнило 90% розміру екрана?


304

Я можу створити та відобразити власне діалогове вікно попередження, але навіть у мене android:layout_width/height="fill_parent"в діалоговому вікні xml він є таким же великим, як вміст.

Що я хочу - це діалог, який заповнює весь екран, за винятком, можливо, прокладки з 20 пікселів. Тоді зображення, що є частиною діалогу, автоматично розтягуватиметься на повний діалоговий розмір із функцією fill_parent.

Відповіді:


355

За словами розробника платформи Android Діанни Хакборн у цьому дискусійному дописі групи, діалоги встановили ширину та висоту макета верхнього рівня у вікні 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. (Хоча трохи більше роботи, щоб діалогове вікно автоматично прийняло відповідну світлу або темну тему або тему Holocomb Holo. Це можна зробити відповідно до http://developer.android.com/guide/topics/ui/themes. html # SelectATheme )


5
Я не розумію відповіді, чи це не працює для мене.
Девід Моралес

4
Здається, це неправда, що діалоги мають широкий вміст wrap_content. Все стає вужчим і відрізаним. Здається, діалог встановлений на деяку максимально задану ширину.
Пітер Айтай

21
Я не розумію, як це відповідає на питання? Чи робить код, запропонований @nmr, діалоговим вікном 90% екрану? Тому що я цього не бачу. Діалогове вікно просто встановлено на fill_width, так що 100%, а не 90%, правда?
Тед

4
@Ted, тема, яку використовує AlertDialog, має поле. Тому результат не доходить до краю екрану, він заповнює приблизно 90%. (Це точно не точно 90%, просто естетичне наближення 90%)
нмр

8
Просто виклик d.getWindow (). GetAttributes (). Width = WindowManager.LayoutParams.FILL_PARENT; перед тим, як зателефонувати шоу (), зробить трюк. Крім того, у мене виникли проблеми з даним методом, оскільки фон діалогового вікна стає непрозорим. Як тільки вилучено copyFrom ((), проблема виправилася.
Олексій

182

Спробуйте ввести RelativeLayoutзамість цього власний макет діалогу LinearLayout. Це працювало для мене.


2
це є і для мене. Хто-небудь може пояснити причину !!
Розіна

Це так, як повинен працювати RelativeLayout або щаслива аварія, яка може піти?
Yetti99

9
Настав 2019 рік, і це все ще працює. Ура! Справді має бути прийнята відповідь.
TaylanUB

@cvarsendan ви могли б пояснити відповідь? Це працювало для мене. Дякую!
Яко

OMG, My RecyclerView ніколи не відображає повний зріст або його висота завжди дорівнює 0, і тоді він прекрасно справляється через день, пробуючи багато рішень. Чому саме RelativeLayout окрім інших?
leegor

85

Вказівка ​​FILL_PARENT у діалоговому вікні, як і інші, запропоновані, не працювала для мене (на Android 4.0.4), оскільки вона просто розтягла чорний фон діалогу, щоб заповнити весь екран.

Добре - це використовувати мінімальне відображуване значення, але вказавши його в коді, щоб діалогове вікно зайняло 90% екрана.

Тому:

Activity activity = ...;
AlertDialog dialog = ...;

// retrieve display dimensions
Rect displayRectangle = new Rect();
Window window = activity.getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(displayRectangle);

// inflate and adjust layout
LayoutInflater inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.your_dialog_layout, null);
layout.setMinimumWidth((int)(displayRectangle.width() * 0.9f));
layout.setMinimumHeight((int)(displayRectangle.height() * 0.9f));

dialog.setView(layout);

Загалом, лише регулювання ширини повинно бути достатньою у більшості випадків.


Схоже, це не працює повністю на версії 4.0 і вище. Він не заповнює 90% екрану. Будь-яка ідея чому? Я роблю це на Motorola Xoom з 4.0
Райан Грей

@RyanGray Він працює для мене на Samsung Nexus S з оновленою ОС. Без додаткової інформації я, на жаль, не можу вам допомогти.
koma

83

Встановіть android:minWidthі android:minHeightв призначеному для користувача перегляді XML. Вони можуть змусити попередження не просто обробляти розмір вмісту. Використовуючи такий вигляд, слід це зробити:

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:minWidth="300dp" 
  android:minHeight="400dp">
  <ImageView
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:background="@drawable/icon"/>
</LinearLayout>

3
Так, за допомогою цього я можу встановити його під певний розмір, але я хочу, щоб він був розміром екрана за вирахуванням прокладки, наприклад, 20 пікселів. Або ширина = 90% ширини екрана.
Фабіан

4
Незалежні пікселі щільності завжди масштабуються так, щоб будь-який екран був 320x480dp, тож перегляд 300x460dp був би 20dp в усіх випадках. Крім того, ви можете знайти розмір екрана таким чином: Display display = ((WindowManager) getSystemService (Context.WINDOW_SERVICE)). GetDefaultDisplay (); int width = display.getWidth (); і відповідно встановіть maxWidth і maxHeight.
jqpubliq

5
Хм з декументації я розумію поняття д.п. Але що робити, якщо співвідношення екрана дорівнює 16: 9 або 4: 3? Чи буде розтягнутий dp нерівномірно?
Фабіан

2
Ні, роздільна здатність dp складе лише 320x480, якщо співвідношення екрана дорівнює 2: 3, тож цей метод не працюватиме.
мссміт

21
що, чому ця відповідь стільки разів підтримується? це жахливе рішення, оскільки воно абсолютно не стосується того, який розмір пристрою користувач використовує.
Цзінь

70

Ще простіше просто зробити це:

int width = (int)(getResources().getDisplayMetrics().widthPixels*0.90);
int height = (int)(getResources().getDisplayMetrics().heightPixels*0.90);

alertDialog.getWindow().setLayout(width, height);

незначна примітка: getResources () доступний у контексті Діяльності.
nat101

Ця відповідь була дуже корисною для сценарію спроб відновити діалогове вікно onCreateпісля обертання пристрою. У цьому випадку ми не можемо покладатися на ширину / висоту будь-чого в макеті, оскільки він ще не створений; але фізична ширина / висота пристрою все ще доступна.
Тім Бігелейзен

4
Якщо ви хочете змінити лише один вимір, ViewGroup.LayoutParams.WRAP_CONTENT
Котов

53
dialog.getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);

1
Це працювало для мене, і його легко було перекласти на MonoDroid, який працював так (де d - новий діалог): d.Window.SetLayout (WindowManagerLayoutParams.FillParent, WindowManagerLayoutParams.FillParent);
theJerm

9
Але 90% - це не те, що 100%. FILL_PARENT вказує на заповнення всієї ширини, 100%, а не 90%. Правильно?
Тед

@Ted Ви маєте рацію. Ви можете замінити FILL_PARENTширину, обчислену як 90% від поточної ширини дисплея. Але мені подобається відповідь, тому що вона легша за інших.
HRJ

26

Усі інші відповіді тут мають сенс, але це не відповідало тому, що потрібно Фабіану. Ось моє рішення. Це може бути не ідеальним рішенням, але воно працює для мене. Він показує діалогове вікно, яке знаходиться на повноекранному екрані, але ви можете вказати прокладку вгорі, внизу, зліва або справа.

Спочатку покладіть це у свій res / values ​​/ styles.xml:

<style name="CustomDialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@color/Black0Percent</item>
    <item name="android:paddingTop">20dp</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:windowIsFloating">false</item>
</style>

Як ви бачите, у мене там андроїд: paddingTop = 20dp - це в основному те, що вам потрібно. Андроїд: windowBackground = @ колір / Black0Percent тільки колірний код оголошений на моєму color.xml

res / values ​​/ color.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="Black0Percent">#00000000</color>
</resources>

Цей колірний код просто виконує функції манекена, щоб замінити стандартний фон вікна діалогового вікна кольором прозорості 0%.

Далі побудуйте власну розкладку діалогового вікна res / layout / dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/dialoglayout"
    android:layout_width="match_parent"
    android:background="@drawable/DesiredImageBackground"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/edittext1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:textSize="18dp" />

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Dummy Button"
        android:textSize="18dp" />

</LinearLayout>

Нарешті, ось наш діалог, який встановлює спеціальний вигляд, який використовує наш dialog.xml:

Dialog customDialog;
LayoutInflater inflater = (LayoutInflater) getLayoutInflater();
View customView = inflater.inflate(R.layout.dialog, null);
// Build the dialog
customDialog = new Dialog(this, R.style.CustomDialog);
customDialog.setContentView(customView);
customDialog.show();

Висновок: Я спробував змінити тему діалогу у стилях.xml під назвою CustomDialog. Це переосмислює діалогове вікно діалогу і дає мені можливість встановити прокладку та змінити непрозорість фону. Це може бути не ідеальним рішенням, але я сподіваюся, що це допоможе вам .. :)


він працює для медузи на даний момент, я не мав змоги протестувати його на інших булідах
Nasz Njoka Sr.

Здається, найчистішим та найелегантнішим рішенням. Працює над Kitkat 4.4 та 4.3.
Девід

У мене є власне діалогове вікно, і НІЧОГО не працювало, поки я не бачу цього, магія, ВСЕ МАГІЯ в користувальницькому діалоговому вікні (що розширюється DialogFragment) з’являється, коли ви це робите: Dialog customDialog = new Dialog(context, STYLE);дякую, ДАЛЕ, дякую.
Sierisimo


Це працює як шарм для діалогового вікна! (Ви також можете визначити Black60Percent, щоб оригінальне вікно було затьмарене) Прикрай побічним ефектом є те, що всі мої погляди в діалозі успадкували прокладки, які я встановив для діалогу ....
runholen

25

Ви можете використовувати відсоток для (JUST) ширини діалогового вікна.

Подивіться на цей приклад із теми Holo:

<style name="Theme.Holo.Dialog.NoActionBar.MinWidth">
    <item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
    <item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
</style>

 <!-- The platform's desired minimum size for a dialog's width when it
     is along the major axis (that is the screen is landscape).  This may
     be either a fraction or a dimension. -->
<item type="dimen" name="dialog_min_width_major">65%</item>

Все, що вам потрібно зробити, це розширити цю тему і змінити значення для "мажор" і "мінор" до 90% замість 65%.

З повагою


1
Щоб скористатися цим діалогом, просто
переведіть

22

Наступне добре працювало для мене:

    <style name="MyAlertDialogTheme" parent="Base.Theme.AppCompat.Light.Dialog.Alert">
        <item name="windowFixedWidthMajor">90%</item>
        <item name="windowFixedWidthMinor">90%</item>
    </style>

(зауважте: windowMinWidthMajor / Minor, як було запропоновано в попередніх відповідях, не зробив жодної хитрості. Мої діалоги постійно змінювали розміри залежно від вмісту)

і потім:

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.MyAlertDialogTheme);

3
Найкраща відповідь поки що. Для мене прекрасно працювали!
Паван

Цікаво: як я можу отримати значення таких спеціальних розмірів, які задаються у відсотках, за допомогою коду?
андроїд розробник

18

Рішення з фактичним розрахунком на 90%:

@Override public void onStart() {
   Dialog dialog = getDialog();
   if (dialog != null) {
     dialog.getWindow()
        .setLayout((int) (getScreenWidth(getActivity()) * .9), ViewGroup.LayoutParams.MATCH_PARENT);
   }
}

де getScreenWidth(Activity activity)визначено наступне (найкраще ставити в клас Utils):

public static int getScreenWidth(Activity activity) {
   Point size = new Point();
   activity.getWindowManager().getDefaultDisplay().getSize(size);
   return size.x;
}

працює як шарм для додатковості додатків, яка повинна функціонувати як діалог

Я отримую з цього приводу індекс масиву :(
доктор aNdRO

@ Dr.aNdRO як? Який рядок? Ви впевнені, що це цей фрагмент коду, а не smt інше?
Мехмет К

.setLayout () Я потрапляю до цього рядка, коли я зміню його на WRAP CONTENT, це прекрасно працює
д-р aNdRO

Дивіться також: stackoverflow.com/questions/36777584/…
Mr-IDE

10

Отримайте ширину пристрою:

public static int getWidth(Context context) {
    DisplayMetrics displayMetrics = new DisplayMetrics();
    WindowManager windowmanager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    windowmanager.getDefaultDisplay().getMetrics(displayMetrics);
    return displayMetrics.widthPixels;
}

потім використовуйте це для створення діалогу 90% пристрою,

Dialog filterDialog = new Dialog(context, R.style.searchsdk_FilterDialog);

filterDialog.setContentView(R.layout.searchsdk_filter_popup);
initFilterDialog(filterDialog);
filterDialog.setCancelable(true);
filterDialog.getWindow().setLayout(((getWidth(context) / 100) * 90), LinearLayout.LayoutParams.MATCH_PARENT);
filterDialog.getWindow().setGravity(Gravity.END);
filterDialog.show();

8

Ну, перед тим, як показувати це, потрібно встановити висоту та ширину діалогу (dialog.show ())

тож зробіть щось подібне:

dialog.getWindow().setLayout(width, height);

//then

dialog.show()

Не встановлює для мене розміри. API> = 21.
Одіс

7

Напевно, найпростіший спосіб, про який я можу придумати -

Якщо діалогове вікно створене з вертикальної лінії LinearLayout, просто додайте манекеновий вигляд "заповнення висоти", який займе всю висоту екрана.

Наприклад -

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:weightSum="1">

    <EditText
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:id="@+id/editSearch" />

    <ListView
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:id="@+id/listView"/>


   <!-- this is a dummy view that will make sure the dialog is highest -->
   <View
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:layout_weight="1"/>

</LinearLayout>

Зверніть увагу на android:weightSum="1"атрибути LinearLayout та атрибути android:layout_weight="1"View в манекені


Приємно! Це не дозволяє моєму веб-перегляду починати надзвичайно коротко і розширюватися на повний зріст після onPageFinished. Кудо!
Ненсі

6

Ну, перед тим, як показувати це, потрібно встановити висоту та ширину діалогу (dialog.show ())

тож зробіть щось подібне:

dialog.getWindow().setLayout(width, height);

//then

dialog.show()

Отримавши цей код, я вніс кілька змін:

dialog.getWindow().setLayout((int)(MapGeaGtaxiActivity.this.getWindow().peekDecorView().getWidth()*0.9),(int) (MapGeaGtaxiActivity.this.getWindow().peekDecorView().getHeight()*0.9));

однак діалоговий розмір може змінюватися, коли пристрій змінює своє положення. Можливо, вам потрібно впоратися самостійно, коли показники змінюються. PD: peekDecorView, означає, що макет у діяльності правильно ініціалізований, інакше ви можете використовувати

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int height = metrics.heightPixels;
int wwidth = metrics.widthPixels;

щоб отримати розмір екрана


6

Після ініціалізації об'єкта діалогу та встановлення перегляду вмісту. Робіть це і насолоджуйтесь.

(у випадку, якщо я встановлюю 90% на ширину і 70% на висоту, оскільки ширина 90%, це буде над панеллю інструментів)

DisplayMetrics displaymetrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int width = (int) ((int)displaymetrics.widthPixels * 0.9);
int height = (int) ((int)displaymetrics.heightPixels * 0.7);
d.getWindow().setLayout(width,height);
d.show();

4

Моя відповідь ґрунтується на комах, але це не вимагає перекриття onStart, а лише onCreateView, який майже завжди змінюється за замовчуванням при створенні нових фрагментів.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.your_fragment_layout, container);

    Rect displayRectangle = new Rect();
    Window window = getDialog().getWindow();
    window.getDecorView().getWindowVisibleDisplayFrame(displayRectangle);

    v.setMinimumWidth((int)(displayRectangle.width() * 0.9f));
    v.setMinimumHeight((int)(displayRectangle.height() * 0.9f));

    return v;
}

Я тестував його на Android 5.0.1.


3

Ось мій варіант для ширини користувальницького діалогу:

DisplayMetrics displaymetrics = new DisplayMetrics();
mActivity.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int width = (int) (displaymetrics.widthPixels * (ThemeHelper.isPortrait(mContext) ? 0.95 : 0.65));

WindowManager.LayoutParams params = getWindow().getAttributes();
params.width = width;
getWindow().setAttributes(params);

Тож залежно від орієнтації пристрою (ThemeHelper.isPortrait(mContext) ) ширина діалогового вікна буде або 95% (для портретного режиму), або 65% (для пейзажу). Трохи більше запитував автор, але це може бути корисним комусь.

Потрібно створити клас, який поширюється з діалогового вікна і ввести цей код у свій onCreate(Bundle savedInstanceState)метод.

Для діалогової висоти код повинен бути подібний до цього.


Що таке ThemeHelper? Я не маю цього класу в своєму проекті.
Nemi

ThemeHelperце просто клас помічників для моїх потреб. Його метод isPortrait(Context)повертає, чи орієнтована на екран пристрою портретна чи пейзажна.
Клани

це матиме проблему, якщо один раз діалогове вікно буде завантажено, а потім ми змінимо орієнтацію, воно збереже своє початкове налаштування в
onCreate

3
public static WindowManager.LayoutParams setDialogLayoutParams(Activity activity, Dialog dialog)
    {
        try 
        {
            Display display = activity.getWindowManager().getDefaultDisplay();
            Point screenSize = new Point();
            display.getSize(screenSize);
            int width = screenSize.x;

            WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
            layoutParams.copyFrom(dialog.getWindow().getAttributes());
            layoutParams.width = (int) (width - (width * 0.07) ); 
            layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
            return layoutParams;
        } 
        catch (Exception e)
        {
            e.printStackTrace();
            return null;
        }
    }

3

Вище відповіді хороші, але жодна з них не працювала повністю для мене. Тож я поєднав відповідь від @nmr і отримав цю.

final Dialog d = new Dialog(getActivity());
        //  d.getWindow().setBackgroundDrawable(R.color.action_bar_bg);
        d.requestWindowFeature(Window.FEATURE_NO_TITLE);
        d.setContentView(R.layout.dialog_box_shipment_detail);

        WindowManager wm = (WindowManager) getActivity().getSystemService(Context.WINDOW_SERVICE); // for activity use context instead of getActivity()
        Display display = wm.getDefaultDisplay(); // getting the screen size of device
        Point size = new Point();
        display.getSize(size);
        int width = size.x - 20;  // Set your heights
        int height = size.y - 80; // set your widths

        WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
        lp.copyFrom(d.getWindow().getAttributes());

        lp.width = width;
        lp.height = height;

        d.getWindow().setAttributes(lp);
        d.show();

3
    ...
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    Dialog d = builder.create(); //create Dialog
    d.show(); //first show

    DisplayMetrics metrics = new DisplayMetrics(); //get metrics of screen
    getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
    int height = (int) (metrics.heightPixels*0.9); //set height to 90% of total
    int width = (int) (metrics.widthPixels*0.9); //set width to 90% of total

    d.getWindow().setLayout(width, height); //set layout

3
показ діалогового вікна перед налаштуванням макета працює для мене.
Ангел Кох

2

Якщо ви використовуєте макет обмежень , ви можете встановити будь-який вид всередині нього, щоб заповнити відсоток екрана:

layout_constraintWidth_percent = "0,8"

Так, наприклад, якщо у діалоговому вікні є ScrollView і ви хочете встановити його на відсоток від висоти екрана. Було б так:

<ScrollView
            android:id="@+id/scrollView"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            app:layout_constraintHeight_percent="0.8">

Сподіваюся, що це комусь допоможе !!


2

Просто дайте AlertDialog цій темі

<style name="DialogTheme" parent="Theme.MaterialComponents.Light.Dialog.MinWidth">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="android:windowMinWidthMajor">90%</item>
    <item name="android:windowMinWidthMinor">90%</item>
</style>

1

Ось коротка відповідь, яка працювала для мене (Тестовано на API 8 та API 19).

Dialog mDialog;
View   mDialogView;
...
// Get height
int height = mDialog.getWindow()
.getWindowManager().getDefaultDisplay()
.getHeight();

// Set your desired padding (here 90%)
int padding = height - (int)(height*0.9f);

// Apply it to the Dialog
mDialogView.setPadding(
// padding left
0,
// padding top (90%)
padding, 
// padding right
0, 
// padding bottom (90%)
padding);


1

вам потрібно використовувати стиль @ style.xml, такий як CustomDialog, щоб відобразити діалогове вікно налаштування.

<style name="CustomDialog" parent="@android:style/Theme.DeviceDefault.Light.Dialog">
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowBackground">@color/colorWhite</item>
        <item name="android:editTextColor">@color/colorBlack</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    </style>

і використовуйте цей стиль у Activity.java, як це

Dialog dialog= new Dialog(Activity.this, R.style.CustomDialog);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setContentView(R.layout.custom_dialog);

і ваш custom_dialog.xml повинен міститись у вашому каталозі макета

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="10dp"
    android:paddingRight="10dp">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text=""
        android:textSize="20dp"
        android:id="@+id/tittle_text_view"
        android:textColor="@color/colorBlack"
        android:layout_marginTop="20dp"
        android:layout_marginLeft="10dp"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginLeft="20dp"
        android:layout_marginBottom="10dp"
        android:layout_marginTop="20dp"
        android:layout_marginRight="20dp">

        <EditText
            android:id="@+id/edit_text_first"
            android:layout_width="50dp"
            android:layout_height="match_parent"
            android:hint="0"
            android:inputType="number" />

        <TextView
            android:id="@+id/text_view_first"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginLeft="5dp"
            android:gravity="center"/>

        <EditText
            android:id="@+id/edit_text_second"
            android:layout_width="50dp"
            android:layout_height="match_parent"
            android:hint="0"
            android:layout_marginLeft="5dp"
            android:inputType="number" />

        <TextView
            android:id="@+id/text_view_second"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginLeft="5dp"
            android:gravity="center"/>

    </LinearLayout>

</LinearLayout>

0
    final AlertDialog alertDialog;

    LayoutInflater li = LayoutInflater.from(mActivity);
    final View promptsView = li.inflate(R.layout.layout_dialog_select_time, null);

    RecyclerView recyclerViewTime;
    RippleButton buttonDone;

    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(mActivity);
    alertDialogBuilder.setView(promptsView);

    // create alert dialog
    alertDialog = alertDialogBuilder.create();

    /**
     * setting up window design
     */
    alertDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);


    alertDialog.show();

    DisplayMetrics metrics = new DisplayMetrics(); //get metrics of screen
    mActivity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
    int height = (int) (metrics.heightPixels * 0.9); //set height to 90% of total
    int width = (int) (metrics.widthPixels * 0.9); //set width to 90% of total

    alertDialog.getWindow().setLayout(width, height); //set layout
    recyclerViewTime = promptsView.findViewById(R.id.recyclerViewTime);


    DialogSelectTimeAdapter dialogSelectTimeAdapter = new DialogSelectTimeAdapter(this);
    RecyclerView.LayoutManager linearLayoutManager = new LinearLayoutManager(this);
    recyclerViewTime.setLayoutManager(linearLayoutManager);
    recyclerViewTime.setAdapter(dialogSelectTimeAdapter);

    buttonDone = promptsView.findViewById(R.id.buttonDone);
    buttonDone.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            alertDialog.dismiss();

        }
    });

користувальницьке діалогове вікно з діалоговою
власною
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.