6

这个问题已经在这里问过了,但没有解决方案。

我有一个WebView. 我想为WebViewusingminHeight属性设置最小高度,但它不起作用。相同的属性适用于 Button。

<?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 !!"/>

从下图中可以清楚地看出,WebView 不支持该minHeight属性。有人知道这个问题的解决方案吗?

在此处输入图像描述

4

4 回答 4

8

首先,让我们了解一下其他视图的 useandroid:minHeight属性。让我们举个Spinner例子。在AbsSpinner#onMeasure()代码中,我们看到以下代码块:

...
preferredHeight = Math.max(preferredHeight, getSuggestedMinimumHeight());
preferredWidth = Math.max(preferredWidth, getSuggestedMinimumWidth());

heightSize = resolveSizeAndState(preferredHeight, heightMeasureSpec, 0);
widthSize = resolveSizeAndState(preferredWidth, widthMeasureSpec, 30);

setMeasuredDimension(widthSize, heightSize);
...

因此,getSuggestedMinimumHeight()在计算首选高度时应予以考虑。

现在,让我们看看WebView是如何测量的。

AwLayoutSizer是负责测量的最后一个组件,WebView我们可以清楚地看到,它onMeasure()不尊重getSuggestedMinimumHeight()价值。

我不确定这是否是预期的行为。然而,我找不到足够的接缝以某种方式影响测量过程。这是类中的代码WebView,其中初始化最终将返回的对象WebViewChromium(上述顺序的第一步)。


    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());
        }
    }

如您所见,这不是可以轻松定制/更改的东西。

于 2017-05-17T18:54:21.073 回答
0

我认为 webview 尺寸根据内容视图端口属性更有效......

检查https://developer.android.com/guide/webapps/targeting.html#Viewport

视口是绘制网页的区域。虽然视口的总可见区域在完全放大时与屏幕大小匹配,但视口有自己的像素尺寸,可用于网页。例如,虽然设备屏幕的物理宽度可能为 480 像素,但视口的宽度可能为 800 像素。当视口比例为 1.0 时,这允许设计为 800 像素宽的网页在屏幕上完全可见。Android 上的大多数网络浏览器(包括 Chrome)默认将视口设置为大尺寸(称为“宽视口模式”,宽度约为 980 像素)。默认情况下,许多浏览器还尽可能缩小以显示完整的视口宽度(称为“概览模式”)。

于 2017-05-19T19:51:19.507 回答
0

试试看 :

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>

在此处输入图像描述

于 2017-05-17T19:15:00.610 回答
-1

使用约束布局。这将有助于解决所有这些类型的错误并且非常易于使用。

如果您的 android studio 版本低于 2.3.1,则添加此依赖项。

compile 'com.android.support.constraint:constraint-layout:1.0.0-beta1'
于 2017-05-24T09:28:26.043 回答