Escalado de la vista de Android 4.1 (setInitialScale, meta-escala inicial no funciona)

Hay cientos de publicaciones en SO y en el resto de Internet acerca de cómo solucionar escalas de visor en Android, y ahora estoy bastante seguro de que no puedes establecer la escala inicial en una vista web en Android 4.1.

Estoy construyendo una aplicación de Cordova (Phonegap), y he conseguido que todo esté bien escalado en el iPhone 3GS, 4S y 5 y un iPad 2, ejecutando iOS7 y el 3GS en iOS6

También tengo la interfaz de usuario escalada para encajar en el Moto G, LG Nexus 5, Google Nexus 5 y Samsung Galaxy S4, todos con Android 4.4

Pero en un Samsung Galaxy S2 y S3 Mini con Android 4.1, no puedo establecer la escala inicial.

La metaetiqueta de la vista HTML no funciona en 4.1 o 4.4 (funciona en Chrome, no en el WebView o en el navegador predeterminado):

<meta name="viewport" content="user-scalable=no, initial-scale=0.5, width=device-width, height=device-height, target-densitydpi=device-dpi" /> 

He creado un proyecto de Cordova absolutamente básico desde el cli, cordova create basicProject , y si agrego algo de Java al método onCreate en la Activity principal, específicamente el método setInitialScale :

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.init(); // Set by <content src="index.html" /> in config.xml super.loadUrl(Config.getStartUrl()); //super.loadUrl("file:///android_asset/www/index.html"); this.appView.setInitialScale( 50 ); } 

Luego obtengo el Moto G en la escala 4.4 como se esperaba:

Moto G en Android 4.4 con una escala inicial de 0,5, a través de setInitialScale (50)

Pero exactamente el mismo proyecto que se ejecuta en el Galaxy S2, no consigue escalado.

Galaxy S2 en Android 4.1 con una escala inicial de 0,5, a través de setInitialScale (50)

Estoy limitado a probar en dispositivos Samsung con 4.1, o una gama de dispositivos en 4.4, por lo que si alguien puede probar lo mismo en 4.2 o 4.3, o cualquier persona en 4.1 no con un Samsung que sería útil.

¿Alguien sabe cómo obtener Android 4.1 para obedecer setInitialScale()

Usted debe ser capaz de añadir algunos javascript a sus páginas web que escalará el contenido cuando recogido por su webview. Aquí hay un ejemplo que escalará su contenido html para que el contenido se ajuste al ancho disponible de la pantalla:

 function customScaleThisScreen() var contentWidth = document.body.scrollWidth, windowWidth = window.innerWidth, newScale = windowWidth / contentWidth; document.body.style.zoom = newScale; } 

Esto funcionará en anteriores (pre 4.2) y en nuevas vistas basadas en cromo (4.2+).

HTHs

@Petey me mostró la solución, pero para la integridad aquí está mi versión con un poco más de contexto phonegap:

 var app = { initialize: function() { this.bindEvents(); }, bindEvents: function() { document.addEventListener('deviceready', this.onDeviceReady, false); }, onDeviceReady: function() { // PETEY'S SOLUTION, WRAPPED IN CODE TO CHECK FOR ANDROID PRE 4.2 // ALSO MODIFIED TO USE DEVICE PIXEL RATIO, INSTEAD OF CONTENTWIDTH if( isAndroid() ) { var matches = device.version.match( /[0-9]+(\.[0-9]+)?/i ); if( matches.length && parseFloat( matches[ 0 ] ) < 4.2 ) { document.body.style.zoom = 1 / window.devicePixelRatio; } } // start app logic } }; app.initialize(); function isAndroid() { if( device.platform.match( /android/i ) ) { return true; } return false; } 
  • Leer eventos de teclado en Android WebView
  • Superposición azul de OnClick
  • ¿Puede alguien dar un ejemplo exacto de la implementación de webview en android
  • La Interfaz de JavaScript de WebView sólo parece funcionar a través de Instant-Run de Android Studio, pero no cuando se compila a través de gradle regular
  • Carga de archivos en WebView
  • setLoadWithOverviewMode para XWalkView
  • Ocultar / Mostrar la barra de herramientas cuando se desplaza el fragmento en las pestañas
  • Ajuste de los contenidos de la página web dentro de una vista web (Android)
  • ¿Qué significa "enable DOM storage API"?
  • Lógica para usar varias vistas web en TabLayout para manejar problemas de memoria
  • La vista web de Android conserva los datos del formulario cuando cambia la orientación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.