Screen Resolution On A PhoneGap App

匿名 (未验证) 提交于 2019-12-03 02:06:01

问题:

I'm writing a Phonegap (3.2) app, I take a HTML5 canvas, make it full screen and the whole app UI is on this canvas.

Using a Samsung Galaxy S4 (Android 4.3) to test the app, the screen resolution of the app is only 360X640 and not 1080X1920 like I want it to be.

What is needed to be done in-order to make the app use the maximum possible screen resolution ?

I've added screen shots 1) // Looks OK but bad resolution

windowWidth = window.innerWidth; windowHeight = window.innerHeight;

2) // Takes small part of the screen, rest is white

windowWidth = window.outerWidth; windowHeight = window.outerHeight;

3) // Only a small part of the picture is visible, as if the image is at 1080X1920 but the screen is 'too small' for it.

windowWidth = screen.width; windowHeight = screen.height;

and here is the full code:

       PhoneGapTesting

Thanks.

回答1:

A solution that is working with both resolution and touch event issue (that came with Ken's post):

In the

Thanks Ken for trying to help bro :))



回答2:

Try something like this:

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'; 

(or an absolute value for the css rule).

On devices where the pixel ratio is higher than the typical 1:1 you get a higher resolution canvas. For normal circumstances everything is as normal.



回答3:

window.innerWidth and window.innerHeight don't necessarily give you the real screen dimensions.

Try this instead:

windowWidth = window.screen.innerWidth;  windowHeight = window.screen.innerHeight;  

target-densitydpi in the meta tag in Miko's post is deprecated in Chrome and should not be used.

Instead, try the following:

index.html:

You should also consider using Phaser's methods for scaling, like this:

Boot.js:

var game = new Phaser.Game(1080, 1920, Phaser.CANVAS, ''); //or AUTO mode for WebGL/DOM 

For performance, use the smallest dimensions that you can regardless of the device's resolution. Let Phaser create the canvas object.

Game.js:

this.scale.scaleMode = Phaser.ScaleManager.EXACT_FIT; //or SHOW_ALL or RESIZE this.scale.pageAlignHorizontally = true; this.scale.pageAlignVertically = true; 

Your entire canvas will scale automatically by the ScaleManager, but this slows the app down when performance is needed -- especially with a large canvas. EXACT_FIT will stretch the canvas, while SHOW_ALL will resize it so that the whole canvas fits onto the screen without changing its aspect ratio (which can leave margins like the one you have).



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!