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
- Cómo recuperar el contenido HTML de WebView (como una cadena)
- ¿Cómo utilizar WebView para mostrar páginas html en modo lector de libros electrónicos?
- ¿Cómo implementar pull down refresh en android?
- Android Webview Javascript - Referencias a secuencias de comandos no funcionan
- Android - Cómo convertir la imagen de webview.capturePicture () a byte y de nuevo a bitmap
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:
Pero exactamente el mismo proyecto que se ejecuta en el Galaxy S2, no consigue escalado.
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()
- Vista web de Android, inicie la actividad ACTION_VIEW cuando la URL no pueda ser manejada por webview
- La forma de Córdoba no se envía o los botones no funcionan (android +4.4)
- ¿Hay alguna manera de hacer que una vista web que ejecuta android 4.0 se realice a un nivel aceptable?
- Cordova webview dentro de Android Fragment on Cordova 4.0
- Android: Reproducción de un sonido de recursos utilizando WebView
- Necesita ayuda con el botón de retroactiva para volver a la vista web
- Youtube iframe player no mostrará videos en android 4.x WebView
- ¿Cómo ver / depurar los encabezados de solicitud no estándar que el navegador de mi teléfono está enviando?
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; }
- Cambio entre la API de Google Maps para Android v2 DEBUG y la clave de API de RELEASE
- ¿Cómo aumentar la caché de LVL-tiempo válido?