J'ai une application Phonegap conçue pour fonctionner sur Android. L'échelle du texte et des images semble bonne sur un téléphone, mais trop petite sur une tablette de 7 pouces.
Existe-t-il un moyen de définir l'échelle pour différentes tailles/densités d'écran qui fonctionne pour une application basée sur Phonegap? Pour une Android Android native, plusieurs dispositions d'écran (comme mentionné dans les documentation Android ) seraient une solution, mais cela peut-il être utilisé pour une application basée sur Phonegap?
Je pourrais utiliser des requêtes de médias CSS pour définir des tailles de police en fonction de la taille de l'écran, mais je veux mettre à l'échelle l'ensemble de l'interface (y compris les images) proportionnellement.
J'ai essayé d'utiliser la propriété CSS zoom
avec des requêtes multimédias pour cibler des tailles d'écran spécifiques, mais cela bouscule le positionnement absolu et interfère avec la fonction des éléments d'interface utilisateur tels que iScroll:
@media only screen and (min-device-width : 768px) {
body{
zoom: 125%;
}
}
@media only screen and (min-device-width : 1024px){
body{
zoom: 150%;
}
}
J'ai également essayé d'utiliser le targetdensity-dpi
propriété meta viewport - l'ajuster à 120 dpi améliore l'échelle sur la tablette 7 ", mais trop grande sur le téléphone. Étant donné que ce code est codé en HTML plutôt qu'en CSS, les requêtes multimédias ne peuvent pas être utilisées pour le faire varier en fonction de la taille de l'écran:
<meta name="viewport"
content="width=device-width, initial-scale=1, targetdensity-dpi=120dpi">
Voici quelques captures d'écran d'une application Phonegap de testcase:
Je viens de remarquer que je n'ai jamais répondu à cela. La solution que j'ai utilisée à la fin était d'utiliser des requêtes multimédias pour définir explicitement les tailles de police et les ressources d'image en fonction de la taille de l'appareil. Les tests des appareils ont montré que cela fonctionnait sur tous mes appareils cibles: iPhone, iPad, Android, Android 7 ", Android = 10 "tables. J'espère que cela aide quelqu'un d'autre.
Par exemple:
/* Start with default styles for phone-sized devices */
p,li{
font-size: 0.9em;
}
h1{
font-size: 1.2em;
}
button{
width: 24px;
height: 12px;
}
button.nav{
background-image: url('img/phone/nav.png');
}
@media only screen and (min-device-width : 768px) { /* 7" tablets */
p, li{
font-size: 1.3em !important;
}
h1{
font-size: 1.6em !important;
}
button{
width: 32px;
height: 16px;
}
button.nav{
background-image: url('img/tablet7/nav.png');
}
}
@media only screen and (min-device-width : 1024px) { /* 10" tablets and iPad */
p, li{
font-size: 1.5em !important;
}
h1{
font-size: 1.8em !important;
}
button{
width: 48px;
height: 24px;
}
button.nav{
background-image: url('img/tablet10/nav.png');
}
}
Avant de renoncer à l'interphone, essayons de l'améliorer. J'étais coincé jusqu'à ce que je le résolve en utilisant cette solution.
Modifiez votre fenêtre d'affichage comme suit:
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, target-densitydpi=medium-dpi, user-scalable=0" />
Réf: Texte et mise en page de l'application Phonegap trop petits
Considérez que target-densitydpi a été déconseillé et supprimé de Webkit selon Pete LePage ( https://plus.google.com/+ GoogleChromeDevelopers/posts/BKHdSgQVFBB ), je pense qu'une meilleure approche consiste à utiliser les requêtes multimédias pour cibler les appareils à haute résolution avant de supprimer l'intervalle téléphonique
J'ai quelques solutions différentes à suggérer:
Définissez toutes les tailles en unités rem plutôt qu'en px . Ensuite, vous pouvez tout mettre à l'échelle en ajustant la taille de la police du document. Esquisser un exemple:
function resize() {
var w = document.documentElement.clientWidth;
var h = document.documentElement.clientHeight;
var styleSheet = document.styleSheets[0];
// ar = aspect ratio h/w; Replace this with your apps aspect ratio
var ar = 1.17;
// x = scaling factor
var x = 0.1;
var rem;
if (h / w > ar) { // higher than aspect ratio
rem = x * w;
} else { // wider than aspect ratio
rem = x * h;
}
document.documentElement.style.fontSize = rem + 'px';
}