web-dev-qa-db-ja.com

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ドキュメントは、ビューから継承されていることを確認します。これは Android:padding 属性をサポートしているため、これが機能しないことに驚いています。

これが既知の問題なのか、私が理解していないレイアウトXMLの相互作用なのかを誰かが知っていますか?

ちなみに、私の回避策は、WebViewの周りに余分なLinearLayoutを置き、代わりにパディングを追加することでした:

  <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>
40
Dan J

WebViewには、パディングの実装にバグがあります。 Webビューにパディングを設定しても、実際のWebページはパディングされませんが、スクロールバーはパディングされます。期待どおりに部分的にしか機能していません。あなたのソリューションは、WebViewの「パディング」を実現する最良の方法です。

41
zrgiu

この問題の別の回避策は、JavaScriptの使用法です。したがって、ウェブページが読み込まれると、このようなjs呼び出しを行ってパディングを設定できます。

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

別のアプローチは、ScrollView内にWebViewを設定することです。

次に、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の外側に配置されます。これは、アプリに必要な動作です。

6
Voski

このCSSを追加してみてください:

<body style='margin:X;padding:X;'>
4
molu2008

@Sergiiのコードは私には機能しませんでしたが、以下は機能します

mWebView.setWebViewClient(new mWebViewClient(){
        @Override
        public void onPageFinished(WebView web, String url) {
            web.loadUrl("javascript:(function(){ document.body.style.paddingTop = '55px'})();");
        }
    });

paddingToppaddingBottom, paddingRight, paddingLeftに変更することもできます。 55pxvalueを任意に変更します。さらに、webviewのJavaScriptを有効にします

  webView.settings.javaScriptEnabled = true
3
Rohan Kandwal

LinearLayoutをパディングで囲みます。

2
Naren

ここでは、パディングの使用は回避策ではありません。レイアウトのパディングはそのためにあります。

だからあなたの「回避策」はあなたがやるべきだったものです。

0
JonA