Якщо вам цікаво, як змінити співвідношення сторін у програмах для складних пристроїв, ви потрапили в потрібне місце. Складані мобільні телефони та планшети значно збільшили різноманітність розмірів та орієнтацій.А це безпосередньо впливає на те, як виглядають ваші програми. Починаючи з нових правил Android 16, системних налаштувань та найкращих практик дизайну, є багато чого врахувати, щоб усе ідеально відображалося на компактних, середніх та розширених екранах.
Картина зрозуміла: Android наполягає на тому, щоб усі програми можна було змінювати розмір та враховували враження від великого екрана. (планшети, режим робочого столу та внутрішні складні екрани). Навіть попри це, є способи налаштувати співвідношення сторін для кожної програми, протестувати в емуляторах, увімкнути поведінку сумісності та, за необхідності, створити винятки. Давайте розглянемо це крок за кроком, не ходя навколо.
Що змінилося в Android 16 (API 36): орієнтація, зовнішній вигляд та розмір
З Android 16 (рівень API 36) система може ігнорувати обмеження програм щодо орієнтації, співвідношення сторін та зміни розміру на великих екранах. Це стосується пристроїв з найменшою шириною (sw) ≥ 600dpтаблетки, той/та/те внутрішній екран багатьох складних телефонів і режим вікна робочого столу. Мета полягає в тому, щоб забезпечити однакову роботу на великих екранах, враховуючи вподобання користувача щодо орієнтації та розміру, коли достатньо місця.
У додатках, що орієнтовані на API 36, Розмір дій можна змінювати за замовчуванням і може перейти в багатовіконний режим, якщо пристрій має sw ≥ 600dp (еквівалентно наявності resizeableActivity="true"). На практиці система ігнорує кілька атрибутів, які раніше призводили до фіксованої поведінки на великих екранах.
Атрибути ігноруються на великих екранах під час орієнтації на API 36
Якщо ваш додаток орієнтований на Android 16, кілька прапорців маніфесту та пов'язані API ігноруються на дисплеях sw ≥ 600dp. Серед атрибутів, які перестають бути ефективними, є screenOrientation (портретна, альбомна та варіанти для датчиків/користувачів), resizeableActivity, minAspectRatio, maxAspectRatio та виклики типу setRequestedOrientation()/getRequestedOrientation() з тими ж фіксованими значеннями.
Ця зміна запобігає «замкненню» програми в портретній або вузькій орієнтації, коли для відображення вмісту є набагато більше місця. Ідея полягає в тому, щоб надавати перевагу адаптивним макетам та уникати небажаного розтягування або обрізання. що дратує користувачів великих екранів.
Винятки: коли ці зміни не застосовуються

Хоча нова модель суворіша на великих екранах, є й винятки. Ці зміни не застосовуються до екранів з роздільною здатністю < 600dp (Багато телефонів, деякі з яких складаються у зовнішньому режимі) та ігри (категорія android:appCategory="game") виключені. Крім того, якщо користувач увімкне поведінку програми за замовчуванням у параметрах співвідношення сторін, це налаштування матиме пріоритет.
Якщо ви публікуєте ігри, Google Play може допомогти вам керувати категорією програм Коли ви використовуєте пакети Android App Bundles та підписи додатків Play, ви отримуєте додаткові переваги розповсюдження. Для неігрових додатків важливо створити адаптивний інтерфейс користувача та дозволити системі керувати відображенням вікон.
Як вимкнути поведінку в API 36 та повідомлення для API 37
Якщо з обґрунтованої причини вам потрібно не застосовувати цю поведінку в API 36, Ви можете оголосити властивість манифесту "android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY". Встановіть це для певної дії або для всієї програми:
<activity ...>
<property
android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
android:value="true" />
</activity>
<application ...>
<property
android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
android:value="true" />
</application>
Остерігайтеся цього: Фреймворк видалить опцію «відмови» в API 37.Іншими словами, для програм, орієнтованих на 37 або вище, обмеження щодо орієнтації, співвідношення сторін та зміни розміру завжди ігноруватимуться на екранах з роздільною здатністю ≥ 600dp.
Тестування на емуляторах та пристроях: як відтворити реальні випадки
Щоб дізнатися, чи зміни вплинули на ваш додаток, Використовуйте емулятори Pixel Tablet та Pixel Fold в Android StudioВизначте targetSdkPreview = "Baklava" у файлі build.gradle вашого модуля та спостерігайте, як ваш інтерфейс користувача реагує на зміни орієнтації, згортання/розгортання та розміру вікна.
Ви також можете ввімкнути універсальну зміну розміру з позначкою сумісності UNIVERSAL_RESIZABLE_BY_DEFAULT на ваших тестових пристроях. А для автоматизованого тестування тестові API Espresso та Jetpack Compose дозволяють перевіряти цілі потоки зі зміною розміру, обертанням та багатовіконним режимом.
Поширені проблеми з великими екранами та як їх уникнути
Програми, які були прив’язані до фіксованої орієнтації, певного співвідношення сторін або дії, яку не можна було змінювати розміром, зазвичай страждають в Android 16: розтягнуті елементи, перекриття, кнопки поза областю перегляду та помилки камери в попередніх переглядах. Рішення полягає у використанні адаптивного дизайну.
- Уникайте розтягнутих компонентів: Додайте максимальну ширину, щоб картка, панель інструментів або зображення не виходили з-під контролю по горизонталі.
- Увімкнути прокручування, де це доречно: якщо немає зміщення, користувач може втратити життєво важливі елементи керування при перемиканні в альбомний режим.
- Поводьтеся з камерою обережно в обох положеннях: Налаштуйте видошукач та його поворот відносно сенсора; не враховуйте фіксоване співвідношення сторін.
- Зберігає стан під час зміни розміру: Дію можна відтворити; вона зберігає введені дані форми та контекст користувача.
- Використовуйте класи розмірів вікон: думайте з точки зору категорій розмірів та Адаптивні макети, що адаптуються до простору.
Голос користувача: «Мої програми дивно виглядають на екрані Fold»
Якщо ви використовуєте пристрій для складання, наприклад Галактика Fold І якщо ви помітили надто перебільшені або розтягнуті зображення в Instagram або Reddit, ви не самотні. Це симптом того, що програми не оптимізовані для великих екранів або з примусовим масштабуванням. Більше того, в іграх є ті, які все ще не використовують простір належним чином і виглядають погано.
Чи є налаштування? На багатьох виробниках можна примусово розгортати повноекранний режим для кожної програми. Однак, якщо додаток не адаптовано, результат може бути неоптимальним.В ідеалі, розробник повинен використовувати адаптивні макети; як користувач, перевірте Налаштування > Дисплей > Повноекранні програми (або Масштабування програм), щоб керувати кожною програмою.
Корисні системні налаштування: співвідношення сторін для кожної програми та щільність
У скінах Android від різних виробників ви знайдете опції для запуску певних програм у повноекранному режимі або з певним співвідношенням сторін. Звичайні шляхи: Налаштування > Дисплей > Масштабування програм / Програми на весь екранАктивуйте його через додаток та перевірте результат.
Якщо вміст все ще не збігається, Ви можете погратися з щільністю (найменшою шириною) з параметрів розробникаУвімкніть режим розробника, сім разів натиснувши на номер збірки (Налаштування > Система > Про телефон), перейдіть до параметрів розробника та налаштуйте "Найменша ширина": зменшення значення збільшує все; збільшення зменшує. Робіть це крок за кроком і запишіть початкове значення.
Для вигнутих екранів деякі системи включають "Ігноруйте випадкові дотики по краях" або «Захист від випадкових дотиків». Уражену область можна налаштувати на певних шарах (наприклад, на деяких моделях Xiaomi). Це не фіксує співвідношення сторін, але зменшує фантомні дотики під час тестування налаштувань.
Створення та адаптивний дизайн: класи розмірів вікон
Jetpack Compose надає ідеальні інструменти для інтерфейсів, які розтягуються без розривів. Класи розмірів вікон (матеріал 3) спрощують логіку Відокремлення макета від фізичних розмірів екрана. Класифікує за шириною/висотою на компактний, середній та розширений і відповідно налаштовує інтерфейс користувача.
У кореневому компонованому об'єкті ви можете отримати клас розміру та поширити його як стан. Уникайте дизайнерських рішень, заснованих на принципі «чи це планшет?» або фіксованому співвідношенні сторінПрограма може працювати в багатовіконному режимі, в сегменті екрана або на зовнішньому моніторі.
Для внутрішніх компонентів використовуйте їх фактичну ширину рендерингу. BoxWithConstraints дозволяє змінювати ЩО відображається залежно від доступного простору. (наприклад, перехід від стовпцевого до рядкового макета з деталями), враховуючи вартість відкладеної композиції на етапі макета.
Весь контент доступний постійно
Якщо компонент відображає більше деталей, коли ширина достатня, Не завантажуйте дані "на основі" розміруЗавжди передавайте їх (наприклад, imageUrl, title, description) та визначайте у компонуваному об'єкті, які частини є видимими. Це дозволяє уникнути побічних ефектів під час зміни розміру та зберігає стан.
Коли змінюється макет (з одного стовпця на два або навпаки), доцільно підняти прапорці статусу, такі як showMore, на верхній рівень. Це зберігає намір користувача, навіть якщо макет змінюєтьсяУ Compose пам’ятайте, що rememberSaveable допомагає підтримувати стан за допомогою відтворення Activity.
Маніфест та обмеження, що блокують зміну розміру
Якщо розмір вашої програми не змінюється або вона зависла в певному співвідношенні сторін, перевірте AndroidManifest.xml. Видалено android:maxAspectRatio, android:resizeableActivity=»false» та виправлено орієнтацію екрана Якщо ви оптимізуєте для великих екранів або вільного формату, то API 36 буде малокорисним для програмного забезпечення з розміром ≥ 600dp, оскільки система їх ігноруватиме.
Для застарілих програм цей крок є ключовим: дозволити вікну зростати та зменшуватися Це перший головний фільтр, який забезпечує належну роботу інтерфейсу користувача в режимі робочого столу, режимі розділеного екрана або під час розкладання складного екрана.
Зміни конфігурації та життєвий цикл
Під час зміни розміру вікна, Конфігурацію оновлено. (ширина/висота, орієнтація, співвідношення сторін). У класичних режимах перегляду це можна побачити за допомогою onConfigurationChanged; у Compose LocalConfiguration.current автоматично відображає ці зміни.
Ви також помітите наслідки життєвого циклу. Починаючи з API 24, лише суттєві зміни розміру відтворюють АктивністьОднак, це може статися. Записуйте події за допомогою LifecycleEventObserver та перевіряйте, коли Activity знищується/створюється. Якщо ви підключаєте зовнішній монітор або щільність змінюється, вона також може бути відтворена.
Безперервність стану та фонова робота
Щоб зберегти стан інтерфейсу користувача від відтворення, Використовуйте rememberSaveable замість remember коли стан має пережити зміни конфігурації. І це підвищує стан до ViewModel для справжньої безперервності між відтвореннями, уникаючи дорогого дублювання ресурсів.
Якщо ініціалізація запускається в onCreate(), її можна повторити. Перемістити ініціалізацію до init ViewModel щоб він запускався лише один раз за життєвий цикл ViewModel. Це особливо важливо, якщо є мережеві виклики або інтенсивні операції вводу-виводу.
Вебдизайн для складних книг: CSS, API та продуктивність
Для вебсайтів все працює паралельно. Складані пристрої потребують точніших медіа-запитівНе лише класичні точки зупинки. Поєднуйте min/max-width зі співвідношенням сторін для таких сценаріїв, як 3:4 (складена портретна орієнтація) або 16:9 (альбомна орієнтація). Реорганізуйте меню, сітки та зображення відповідно до фактично доступного простору.
@media (min-width: 600px) and (max-width: 900px) {
/* Pantallas intermedias: plegable semiabierto */
}
@media (aspect-ratio: 3/4) {
/* Vertical plegado */
}
@media (aspect-ratio: 16/9) {
/* Apaisado desplegado */
}
API сегментів вікон допомагає виявляти активні сегменти екрана у багатопанельних середовищах. Він також обробляє підгонку до області перегляду: закриває закруглені кути або вирізи, та визначає орієнтацію з JS для налаштування інтерфейсу користувача без мерехтіння. Оптимізація продуктивності з лінивим завантаженням та стисненням для типових сценаріїв багатозадачності складного пристрою.
if (window.screenSegments) {
const segments = window.screenSegments;
console.log(segments);
}
/* CSS */
body { /* iOS/entornos compatibles */
viewport-fit: cover;
}
/* JS */
if (screen.orientation.type === 'landscape-primary') {
console.log('Modo apaisado');
}
Класи розмірів: рекомендовані порогові значення та приклади
Google рекомендує три діапазони ширини/висоти в DP, які дуже добре підходять для мобільних телефонів, складних пристроїв та планшетів. Компактний (0–599 dp), Середній (600–839 dp), Розширений (840+ dp). Складаний мобільний телефон У вертикальній орієнтації він може залишатися в середньому значенні; при горизонтальному розгортанні він зазвичай стає розширеним.
Виходячи з цього, Ви можете замінити списки сітками з 2–3 стовпцями Коли є місце, збільште розмір шрифту до розширеного, а в компактному форматі забезпечте читабельність вмісту. Material 3 надає `material3-window-size-class` для надійного обчислення цього (пам’ятайте, що він може бути в експериментальному стані та вимагає `@OptIn`).
Практики інтерфейсу користувача: багаторазово використовувані компоновані елементи та багаторівнева логіка
Гарною схемою є централізація логіки визначення розміру в одній точці (наприклад, кореневому компонованому об'єкті) та передати похідний стан для решти. Це запобігає неявному залежності внутрішніх компонованих елементів від глобального розміру екрана; це зробить їх більш повторно використовуваними та тестованими.
Для адаптивного списку з деталями вирішіть на верхньому рівні, чи відображати його. одна або дві панелі залежно від шириниі дозвольте дітям зосередитися на вмісті. Якщо картка відображає додаткову інформацію, коли є більше місця, вирішуйте за допомогою BoxWithConstraints або модифікаторів, але не блокуйте компонент до одного місця чи розміру.
Режим робочого столу та кількох вікон: готуйтеся до переїзду
У ChromeOS та андроїд робочий стілРозмір вікна змінюється так само, як і в операційній системі ПК. Ваш додаток має враховувати часті зміни розміру і зберігати свій стан, не будучи заблокованим фіксованою орієнтацією чи статичним співвідношенням сторін. Емулятори та кодові лабораторії Google – чудовий спосіб методично протестувати все це.
Це ідеальне середовище для перевірки того, що ваш додаток Він не перераховує та не завищує суму. Під час зміни розміру переходи між макетами мають бути плавними. Якщо користувач згортає вікно та повертається, програма має відновити роботу без втрати контексту.
Графік публікацій та вимоги
Android 16 встановлює нові стандарти: Сумісність з усіма орієнтаціями, співвідношеннями сторін та зміною розміру на екранах ≥ 600dp для програм, що орієнтовані на API 36 (з можливістю його вимкнення у 36, але не у 37).
Терміни відрізняються залежно від магазину, але Google Play вимагатиме цільового API версії 36, починаючи з серпня 2026 року.Якщо у вас все ще є жорсткі обмеження, саме час спланувати міграцію, щоб уникнути несподіванок і, перш за все, покращити враження від перегляду на великих екранах.
Рекомендовані ресурси та тести
Для практики Google пропонує лабораторії коду, зосереджені на зміні розміру: спостерігати за LocalConfiguration, життєвий цикл записуВін переносить обмеження маніфесту та вмикає rememberSaveable. Приклади програм Reply, JetNews та CanonicalLayouts показують перевірені шаблони для великих екранів.
Для веб-команд, Інструменти розробника Chrome, BrowserStack та лабораторія віддаленого тестування Samsung Вони спрощують тестування у складеному/розгорнутому стані. А якщо ви працюєте з нативним Android, емулятори Pixel Tablet/Fold та фреймворк сумісності UNIVERSAL_RESIZABLE_BY_DEFAULT — це ваш ігровий майданчик.
Зауваження спільноти: очікування та реальність
Багато користувачів складних ноутбуків зазначають, що Їм потрібно виправляти це додаток за додатком. Масштабування помітне, і деякі ігри виглядають гірше. Це зрозуміло в умовах переходу екосистеми, але Android 16 та його методи адаптивного дизайну проклали шлях для покращення додатків. справді скористайтеся перевагами великих екранівЧим швидше ви мігруєте, тим швидше припиняться скарги на розтягнення та порізи.
Якщо, попри все, ви відчуваєте, що ваш пристрій не пропонує очікуваного досвіду, існують варіанти викупу та продажу вживаних пристроїв. В оригінальному контенті згадувалися такі сервіси, як Moviloff. Перетворити ваш старий мобільний телефон на готівку та дати йому друге життя, що також допоможе довкіллю. Це не технічне рішення, але воно може вас зацікавити, якщо ви думаєте про придбання нового пристрою.
Опанування співвідношення сторін та зміни розміру у складних додатках вимагає прийняття нової моделі: Дозвольте системі обробляти великі вікна, створювати адаптивні інтерфейси, зберігати стан та тестувати в реальних сценаріях.З огляду на те, що Android 16 просувається (а Android 37 закриває двері для обмежень на великих екранах), шлях очевидний: прийняти класи розмірів вікон, очистити маніфест, уникати розтягнутих компонентів, увімкнути прокручування, подбати про камеру в обох орієнтаціях та вимірювати продуктивність.
Якщо вам потрібні негайні налаштування, використовуйте системні опції, такі як повноекранні програми та, з обережністю, налаштування «Найменша ширина». Користувачі одразу помітять різницю: більше видимого контенту, менше спотворень та враження, гідні великого екрана. Поділіться цією інформацією, і більше користувачів знатимуть, як змінити співвідношення сторін на своєму мобільному телефоні.