¿Por qué el atributo minHeight no funciona en WebView Android?
Esta pregunta ya se ha hecho aquí , pero no tiene solución.
Tengo un WebView
. Quiero establecer la altura mínima para el objeto WebView
utilizando minHeight
, pero no funciona. El mismo atributo funciona para Button.
- Cómo llamar al método Javascript desde la vista web en Android
- Android claro hilo webview, libre de memoria, evitar OutOfMemoryError
- WebView onPageFinished se está llamando cuando el error Página no disponible. ¿Solución?
- Android - forma simple de entrada de usuario web-view para back-end java con jQuery Mobile
- Cómo obtener Bitmap de WebView genera un fallo de OutOfMemory
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.anshul.webview.WebActivity"> <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="400dp"></WebView> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:minHeight="150dp" android:text="This is a Button. It's minHeight is set to 150 dp and it works !!"/>
Claramente de la imagen de abajo, el WebView no está apoyando el atributo minHeight
. ¿Alguien sabe una solución para este problema?
- Vista demasiado grande para encajar en la caché de dibujo en Webview dentro de scrollview
- El controlador onScaleChanged de WebView se llama varias veces
- Cómo desplazarse mediante programación WebView de Android
- Android: WebView shouldInterceptRequest no agregar RequestProperties en el WebView
- Android cómo cambiar los conjuntos de cifrado SSL predeterminados para WebView HTTPS
- NullPointerException en webview.java (android.webkit.WebView $ PrivateHandler.handleMessage)
- Dipaly farsi texto en la web de android (para los teléfonos que no apoyan farsi)
- De ancho: 100% en CSS no bien renderizado en Android 4.4
En primer lugar, vamos a entender cómo el uso de otras vistas android:minHeight
atributo android:minHeight
. Tomemos Spinner
por ejemplo. En AbsSpinner#onMeasure()
que codificamos ver el siguiente fragmento de código:
... preferredHeight = Math.max(preferredHeight, getSuggestedMinimumHeight()); preferredWidth = Math.max(preferredWidth, getSuggestedMinimumWidth()); heightSize = resolveSizeAndState(preferredHeight, heightMeasureSpec, 0); widthSize = resolveSizeAndState(preferredWidth, widthMeasureSpec, 30); setMeasuredDimension(widthSize, heightSize); ...
Por lo tanto, getSuggestedMinimumHeight()
debe considerarse al calcular la altura preferida.
Ahora, veamos cómo se está midiendo WebView
.
-
WebView#onMeasure()
delega el trabajo aWebViewChromium#onMeasure()
-
WebViewChromium#onMeasure()
delega el trabajo aAwContents#onMeasure()
-
AwContents#onMeasure()
delega el trabajo aAwLayoutSizer#onMeasure
AwLayoutSizer
es el último componente que es responsable de medir WebView
y podemos ver claramente que su onMeasure()
no respeta el valor getSuggestedMinimumHeight()
.
No estoy seguro de si este es un comportamiento intencionado o no. Sin embargo, no puedo encontrar suficientes costuras para afectar de algún modo ese proceso de medición. Aquí está el chuck de código en la clase WebView
, donde se inicializa el objeto que eventualmente devolverá WebViewChromium
(el primer paso en el orden mencionado anteriormente).
private void ensureProviderCreated() { checkThread(); if (mProvider == null) { // As this can get called during the base class constructor chain, pass the minimum // number of dependencies here; the rest are deferred to init(). mProvider = getFactory().createWebView(this, new PrivateAccess()); } }
private void ensureProviderCreated() { checkThread(); if (mProvider == null) { // As this can get called during the base class constructor chain, pass the minimum // number of dependencies here; the rest are deferred to init(). mProvider = getFactory().createWebView(this, new PrivateAccess()); } }
Como se puede ver, esto no es algo que se puede personalizar o cambiar fácilmente.
Creo que las dimensiones de la webview funcionan más según las propiedades del puerto de vista de contenido …
Consulte https://developer.android.com/guide/webapps/targeting.html#Viewport
La ventana gráfica es el área en la que se dibuja su página web. Aunque el área visible total de la ventana gráfica coincide con el tamaño de la pantalla cuando se amplía completamente, la ventana de visualización tiene sus propias dimensiones de píxeles que pone a disposición de una página web. Por ejemplo, aunque una pantalla de dispositivo puede tener una anchura física de 480 píxeles, la ventana de visualización puede tener un ancho de 800 píxeles. Esto permite que una página web diseñada en 800 píxeles de ancho para ser completamente visibles en la pantalla cuando la escala de la ventana es 1,0. La mayoría de los navegadores web de Android (incluido Chrome) establecen la ventana gráfica de forma predeterminada en un tamaño grande (conocido como "modo de vista ampliada" con una anchura aproximada de 980 px). Muchos navegadores también alejan lo más posible, de forma predeterminada, para mostrar el ancho completo de la ventana de visualización (conocido como "modo de vista general").
Use constraint layout. Que ayudará a resolver todos estos tipos de errores y muy fácil de usar.
Si su versión de estudio de Android está por debajo de 2.3.1 a continuación, agregue esta dependencia.
compile 'com.android.support.constraint:constraint-layout:1.0.0-beta1'
Intentalo :
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); WebView webView = (WebView)findViewById(R.id.webView); webView.loadDataWithBaseURL(null, "<html><body bgcolor=\"#E6E6FA\"> hehehe </body></html>", "text/html", "utf-8", null); } <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:background="@color/blue" android:layout_height="match_parent"> <LinearLayout android:minHeight="300dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_alignParentStart="true" > <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:minHeight="150dp" android:text="This is a Button. It's minHeight is set to 150 dp and it works !!"/> </RelativeLayout>
- ¿Cómo usar la misma autoridad de ContentProvider en las versiones gratuitas y de pago de la aplicación?
- OSMDROID android 4.2: Mapquest: A partir del 11 de julio de 2010, el acceso directo a los mosaicos ha sido descontinuado