2017-05-11 122 views
6

這個問題已被詢問here,但它沒有解決方案。我有一個WebView。我想使用minHeight屬性將最小高度設置爲WebView,但它不起作用。 Button的相同屬性起作用。爲什麼minHeight屬性在WebView Android中不起作用?

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

顯然從下面的圖像,web視圖是不支持的minHeight屬性。有沒有人知道這個問題的解決方案?

enter image description here

+0

其中android版本你有這個問題? – savepopulation

+0

我在Android 25上試過了,面臨這個問題。但我認爲這與Android版本無關。 – thedarkpassenger

+0

在pre kit kat版本中有一些關於webview的問題。所以我問。 – savepopulation

回答

7

首先,讓我們瞭解其他視圖的使用android: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是最後一個組件,它負責測量WebViewwe can clearly see,其onMeasure()不尊重getSuggestedMinimumHeight() v ALUE。

我不確定這是預期行爲還是不行。儘管如此,我無法找到enough seams以某種方式影響測量過程。 Here'sWebView類中代碼的夾頭,其中最終會返回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()); 
     } 
    } 
 

正如您所看到的,這不是容易定製/更改的東西。

-1

試試:

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> 

enter image description here

+0

你應該考慮皮棉給出的[警告](http://i.imgur.com/v1OfFzl.png)。 – azizbekian

+0

我們可以通過代碼。 定義LinearLayout的高度。 – MrTy

0

我想的WebView尺寸工作更根據內容視圖端口屬性...

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

視口的面積您的網頁被繪製。雖然視口的全部可見區域在放大時完全匹配屏幕的大小,但視口具有自己的像素尺寸,可用於網頁。例如,儘管設備屏幕可能具有480像素的物理寬度,但視口可具有800像素的寬度。這使得當視口比例爲1.0時,800像素寬的網頁可以在屏幕上完全可見。 Android上的大多數Web瀏覽器(包括Chrome)都默認將視口設置爲較大尺寸(稱爲「寬視口模式」,寬度大約爲980px)。默認情況下,許多瀏覽器也會盡可能縮小以顯示完整的視口寬度(稱爲「概覽模式」)。

0

使用約束佈局,這將有助於解決所有這些類型的錯誤和非常容易使用。

如果您的android studio版本低於2.3.1,則添加此依賴項。

compile 'com.android.support.constraint:constraint-layout:1.0.0-beta1' 
相關問題