2012-02-07 84 views
31

我的佈局文件定義了一個WebView,在其下面有一些固定高度的按鈕。如何在WebView中添加填充

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:fadingEdge="none"> 

    <WebView 
    android:id="@+id/webview" 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1.0"/> 

    <LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="60dp" 
    android:padding="8dp"> 

    <Button 
     android:text="Decline" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1.0"> 
    </Button> 

    <Button 
     android:text="Accept" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1.0"> 
    </Button> 

    </LinearLayout> 
</LinearLayout> 

我嘗試添加填充周圍的WebView,因爲此刻的文本運行一直到UI的邊緣。

我試着將android:padding="8dp"添加到WebView中,但沒有添加填充。我也嘗試了paddingLeft和paddingRight,但他們也沒有工作。

WebView API文檔確認它繼承自View,它支持android:padding屬性,所以我很驚訝這沒有奏效。

有沒有人知道這是一個已知的問題,還是我不明白的佈局XML的一些相互作用?

僅供參考,我的解決方法是把一個額外的LinearLayout各地的WebView,並填充添加到代替:

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1.0" 
    android:padding="8dp"> 

    <WebView 
     android:id="@+id/webview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"/> 

    </LinearLayout> 
+0

嘗試利潤而不是填充 - 我認爲這就是你想要的。填充對於WebView imo不是真的有意義 – AJcodez 2012-02-07 02:12:35

+0

好主意,但是我只是嘗試在原始XML中的WebView上設置layout_marginRight和layout_marginLeft,並導致下面的按鈕未顯示。我不知道爲什麼我的佈局有什麼根本性的錯誤? – 2012-02-07 02:47:33

+0

看起來你的layout_weight設置不正確。爲什麼給按鈕layout_weight,如果他們是wrap_content? – AJcodez 2012-02-07 17:51:19

回答

32

WebView在填充實現中存在一個錯誤。在webview上設置填充不會填充實際的網頁,但會填充滾動條。這只是部分按預期工作。 您的解決方案是實現WebView「填充」的最佳方法。

+1

你知道如果爲WebView設置layout_marginRight和layout_marginLeft應該工作嗎? – 2012-02-08 20:00:30

+0

是的,這應該工作。 – zrgiu 2012-02-09 07:01:19

+0

這仍然是一個案例嗎?或者它已被修復,現在有一種方法可以添加填充? (沒有CSS/JavaScript解決方案)。 – wtk 2015-09-23 08:33:03

-1

使用填充不在這裏解決方法。 用於佈局的填充是爲此目的而存在的。

所以你的'解決方法'是你應該做的。

+0

你是說android:padding值不能在WebView上設置? – 2012-02-07 03:19:17

+0

如果您查看TextView.java的源代碼,它會考慮onDraw()中的填充。但是WebView.java沒有。這將解釋爲什麼。 – JonA 2012-02-07 04:49:54

2

剛剛嘗試添加這個CSS:

<body style='margin:X;padding:X;'> 
+2

我不認爲這個答案與問題有關。雖然我明白它可能真的有效,但問題是關於Android佈局問題,而不是關於「WebView」中顯示的html內容。 – 2014-06-13 13:00:14

+0

感謝您的解決方案。這是向網頁視圖添加填充的更好方法,因爲傳統的內容不適用於該內容。 – 2017-04-20 06:24:51

17

此問題的另一個解決辦法可能是在JavaScript中使用。因此,當加載網頁,你可以做這樣的JS調用設置內邊距:

webView.setWebViewClient(new WebViewClient() { 
    @Override 
    public void onPageFinished(WebView view, String url) { 
     webView.loadUrl("javascript:document.body.style.margin=\"8%\"; void 0"); 
    } 
}); 
+3

這對我來說是一個很好的解決方案,非常感謝! – Booger 2015-12-08 17:51:42

+0

加一個「void 0」。沒有這個JavaScript沒有運行。 – 2016-07-10 09:43:45

1

添加的LinearLayout adround它填充。

+0

答案應該發佈代碼這是一條評論 – 2016-01-23 16:33:45

2

另一種辦法是設置一個滾動型

的內部的WebView然後你可以左/右頁邊距添加到網頁視圖,它會得到填充效果。然而,滾動將由ScrollView處理。

<ScrollView style="@style/MatchMatch"> 

    <WebView 
     android:id="@+id/my_web_view" 
     android:layout_marginLeft="@dimen/webViewMargin" 
     android:layout_marginRight="@dimen/webViewMargin" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 
</ScrollView> 

這將導致滾動條放置在WebView之外,這是我想要的應用程序的行爲。

+1

爲什麼使用scrollview?一個簡單的FrameLayout就可以工作,你不必關心可能的嵌套滾動問題。 – 2017-03-02 01:33:34

+1

我選擇了ScrollView,因爲我想讓滾動條靠在ScrollView的邊緣。 如果我要使用FrameLayout,滾動條將違背內部webview。 – Voski 2017-03-03 00:16:06

+0

這是創建相同視覺效果的最佳方式。邊距方式導致看起來錯誤的滾動行爲。然而現在更好的方法可能是使用'NestedScrollView'來代替。 – 2018-03-01 06:30:48