Разрешение экрана в приложении PhoneGap
Я пишу приложение Phonegap (3.2), я беру холст HTML5, делаю его полноэкранным, и весь пользовательский интерфейс приложения находится на этом холсте.
Используя Samsung Galaxy S4 (Android 4.3) для тестирования приложения, разрешение экрана в приложении составляет всего 360X640, а не 1080X1920, как я хочу.
Что необходимо сделать для того, чтобы приложение использовало максимально возможное разрешение экрана?
Я добавил скриншоты
1)//Выглядит хорошо, но плохое разрешение
windowWidth = window.innerWidth;
windowHeight = window.innerHeight;
![enter image description here]()
2)//Делает небольшую часть экрана, отдых белый
windowWidth = window.outerWidth;
windowHeight = window.outerHeight;
![enter image description here]()
3)//Отображается только небольшая часть изображения, как если бы изображение было на 1080X1920, но экран был "слишком мал" для него.
windowWidth = screen.width;
windowHeight = screen.height;
![enter image description here]()
и вот полный код:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>PhoneGapTesting</title>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" charset="utf-8" src="cordova.js"></script>
<!-- -->
<script type="text/javascript">
var windowWidth;
var windowHeight;
var canvasMain;
var contextMain;
var backgroundImage;
$(document).ready(function() {
windowWidth = window.innerWidth;
windowHeight = window.innerHeight;
//windowWidth = window.outerWidth; // Only 'window.innerWidth' + 'window.innerHeight' look OK but not max resolution
//windowHeight = window.outerHeight;
//windowWidth = screen.width;
//windowHeight = screen.height;
canvasMain = document.getElementById("canvasSignatureMain");
canvasMain.width = windowWidth;
canvasMain.height = windowHeight;
contextMain = canvasMain.getContext("2d");
backgroundImage = new Image();
backgroundImage.src = 'img/landscape_7.jpg';
backgroundImage.onload = function() {
contextMain.drawImage(backgroundImage, 0, 0, backgroundImage.width, backgroundImage.height, 0, 0, canvasMain.width, canvasMain.height);
};
$("#canvasSignatureMain").fadeIn(0);
})
</script>
</head>
<body scroll="no" style="overflow: hidden">
<center>
<div id="deleteThisDivButNotItsContent">
<canvas id="canvasSignatureMain" style="border:1px solid #000000; position:absolute; top:0;left:0;"></canvas><br>
</div>
</center>
</body>
</html>
Спасибо.
Ответы
Ответ 1
Решение, работающее как с разрешением, так и с событием касания (которое появилось с сообщением Кена):
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" />
В < головa >
Спасибо Кен за попытку помочь брату:))
Ответ 2
Попробуйте что-то вроде этого:
var windowWidth = window.innerWidth;
var windowHeight = window.innerHeight;
var pixelRatio = window.devicePixelRatio || 1; /// get pixel ratio of device
canvasMain = document.getElementById("canvasSignatureMain");
canvasMain.width = windowWidth * pixelRatio; /// resolution of canvas
canvasMain.height = windowHeight * pixelRatio;
canvasMain.style.width = windowWidth + 'px'; /// CSS size of canvas
canvasMain.style.height = windowHeight + 'px';
(или абсолютное значение для правила css).
На устройствах, где соотношение пикселей выше, чем типичное 1:1, вы получаете холст с более высоким разрешением. Для нормальных обстоятельств все как обычно.
Ответ 3
window.innerWidth
и window.innerHeight
не обязательно дают вам реальные размеры экрана.
Попробуйте это вместо:
windowWidth = window.screen.innerWidth;
windowHeight = window.screen.innerHeight;
target-densitydpi
в метатеге в записи Miko устарел в Chrome и не должен использоваться.
Вместо этого попробуйте выполнить следующее:
index.html
<meta name="viewport" content="initial-scale=1 maximum-scale=1 user-scalable=0 minimal-ui" />
Вы также должны рассмотреть использование методов Phaser для масштабирования, например:
Boot.js:
var game = new Phaser.Game(1080, 1920, Phaser.CANVAS, ''); //or AUTO mode for WebGL/DOM
Для производительности используйте наименьшие размеры, которые вы можете независимо от разрешения устройства. Пусть Phaser создает объект canvas.
Game.js:
this.scale.scaleMode = Phaser.ScaleManager.EXACT_FIT; //or SHOW_ALL or RESIZE
this.scale.pageAlignHorizontally = true;
this.scale.pageAlignVertically = true;
Весь ваш холст автоматически масштабируется с помощью ScaleManager, но это замедляет приложение вниз, когда требуется производительность - особенно с большим холстом. EXACT_FIT растянет холст, а SHOW_ALL изменит его размер так, чтобы весь холст вписывался в экран без изменения его соотношения сторон (который может оставить поля, подобные тому, который у вас есть).