html - 安卓像素 - 手机分辨率
在phonegap中支持多种分辨率和图像密度 (4)
我是新手机和遇到问题,我正在制作一个手机应用程序,它将运行在不同屏幕尺寸和不同屏幕分辨率的多个平台设备上,所以我必须根据屏幕分辨率加载不同分辨率的图像。
这可以通过简单地将你的不同分辨率的图像放在hdpi,mdpi和ldpi文件夹中在android中实现,它(android)根据设备屏幕分辨率自动获取图像。 但是如何在phonegap中做到这一点。
我看过很多关于响应式网页设计的文章,他们都说关于在网页上定位元素,但没有他们讲过如何根据屏幕分辨率放置图像。
谢谢我提前。
编辑的问题
我使用以下代码为HTML
<div id="header" data-role="header" data-position="fixed">
<img alt="app_icon" src="pictures/app_logo.png" display="inline" class="align-left" />
<img alt="brand_icon" src="pictures/company_logo.png" display="inline" class="align-right" /><h1></h1>
</div>
现在我在assets / www / pictures文件夹中有图像。 此文件夹包含2张相同分辨率的图片app_logo.png和company_logo.png以及2张更高分辨率的图片app_logo_big.png和company_logo_big.png现在通过媒体查询我将知道屏幕尺寸并应用样式但据我所知我无法从css更改img src。 那么现在我将如何使用这些不同分辨率的图像
你也可以使用一个handlebars帮手来做这个,这个代码密集程度较低,在我看来推荐的方法:
if (screen.width <= 480) {
imgFolder = 'img/low/';
}
else {
imgFolder = 'img/high/';
}
Handlebars.registerHelper('imgFolder', function () {
return imgFolder
});
而img/low/
和img/high
包含具有相同名称的不同分辨率的图像。
然后在你的模板中:
<img src="{{imgFolder}}yourImage.png" />
当然,您必须根据应用定位的设备设置屏幕尺寸值。
附录:如果您在cordova浏览器中没有1:1像素映射(不推荐 - 您的图像将具有模糊/不清晰的外观) screen.width
将不同于浏览器宽度(window.innerWidth),您必须使用$(window).width()
或window.innerWidth
。 您可以使用媒体查询修复错误的映射。
创建对更多大小的支持是一个问题,但您可以使用CSS中的@media查询来修复它。 检查此示例代码:
/* iPads (landscape) ----------- */
@media only screen
and (min-device-width : 768px)
and (max-device-width : 1024px)
and (orientation : landscape) {
/* Styles */
}
/* iPads (portrait) ----------- */
@media only screen
and (min-device-width : 768px)
and (max-device-width : 1024px)
and (orientation : portrait) {
/* Styles */
}
/* Desktops and laptops ----------- */
@media only screen
and (min-width : 1224px) {
/* Styles */
}
/* Large screens ----------- */
@media only screen
and (min-width : 1824px) {
/* Styles */
}
使用此代码,您可以添加对所有设备的支持。 查看此链接以获取更多浏览器的更多代码
您可以使用的功能:
- 宽度和高度:(
(min-device-width : 768px) and (max-device-width : 1024px)
- 方向:(
(orientation: landscape)
或(orientation: portrait)
- 器件像素比:( -
(-webkit-device-pixel-ratio: 1.5)
编辑 :
HTML:
<div id="header" data-role="header" data-position="fixed">
<span id="app_icon" alt="app_icon" src="pictures/app_logo.png" display="inline" class="align-left"></span>
<span id="brand_icon" alt="brand_icon" src="pictures/company_logo.png" display="inline" class="align-right"></span><h1></h1>
</div>
将img
更改为span
并添加ID。
CSS:
@media screen and (-webkit-device-pixel-ratio: 0.75) {
#app_icon {
width: 100px; /* Example size */
height: 100px; /* Example size */
background: url(pictures/app_logo_small.png);
}
}
@media screen and (-webkit-device-pixel-ratio: 1) {
#app_icon {
width: 150px; /* Example size */
height: 150px; /* Example size */
background: url(pictures/app_logo_medium.png);
}
}
@media screen and (-webkit-device-pixel-ratio: 1.5) {
#app_icon {
width: 200px; /* Example size */
height: 200px; /* Example size */
background: url(pictures/app_logo_large.png);
}
}
@media screen and (-webkit-device-pixel-ratio: 2) {
#app_icon {
width: 300px; /* Example size */
height: 300px; /* Example size */
background: url(pictures/app_logo_xlarge.png);
}
}
通过此示例,您可以更改代码并进行修复。 希望这有帮助!
我认为你必须将报告的屏幕尺寸除以屏幕密度,以获得媒体查询的宽度和高度尺寸。
然后通过jquery动态更改图像:
HTML:
<div id="header" data-role="header" data-position="fixed">
<img id="app-icon" src="pictures/app_logo.png" display="inline" />
</div>
使用Javascript:
$(document).ready(function () {
if(window.devicePixelRatio == 0.75) {
$("#app-icon").attr('src', '/images/lpdi/app-icon.png');
}
else if(window.devicePixelRatio == 1) {
$("#app-icon").attr('src', '/images/mdi/app-icon.png');
}
else if(window.devicePixelRatio == 1.5) {
$("#app-icon").attr('src', '/images/hpdi/app-icon.png');
}
else if(window.devicePixelRatio == 2) {
$("#app-icon").attr('src', '/images/xpdi/app-icon.png');
}
}
通过CSS:使用不同分辨率的媒体查询:
HTML:
<div id="header" data-role="header" data-position="fixed">
<span id="app-icon"></div>
<span id="brand-icon"></div>
</div>
CSS:
/* Low density (120), mdpi */
@media screen and (-webkit-device-pixel-ratio: 0.75) {
#app-icon { background-image:url(pictures/ldpi/app-icon.png); }
#brand-icon { background-image:url(pictures/ldpi/brand-icon.png); }
}
/* Medium density (160), mdpi */
@media screen and (-webkit-device-pixel-ratio: 1) {
#app-icon { background-image:url(pictures/mpi/app-icon.png); }
#brand-icon { background-image:url(pictures/mdpi/brand-icon.png); }
}
/* High density (240), hdpi */
@media screen and (-webkit-device-pixel-ratio: 1.5) {
#app-icon { background-image:url(pictures/hdpi/app-icon.png); }
#brand-icon { background-image:url(pictures/hdpi/brand-icon.png); }
}
/* Extra high density (320), xhdpi */
@media screen and (-webkit-device-pixel-ratio: 2) {
#app-icon { background-image:url(pictures/xdpi/app-icon.png); }
#brand-icon { background-image:url(pictures/xdpi/brand-icon.png); }
}
如果你想过滤,
and (orientation: landscape)
- and (orientation: landscape)
设备WIDTH and (min-device-width : 480px) and (max-device-width : 854px)
例:
@media screen and (-webkit-device-pixel-ratio: 1.5) and (min-device-width : 640px) and (max-device-width : 960px) and (orientation: landscape) {
/* Your style here */
}