私のレイアウトファイルは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>
WebViewには、パディングの実装にバグがあります。 Webビューにパディングを設定しても、実際のWebページはパディングされませんが、スクロールバーはパディングされます。期待どおりに部分的にしか機能していません。あなたのソリューションは、WebViewの「パディング」を実現する最良の方法です。
この問題の別の回避策は、JavaScriptの使用法です。したがって、ウェブページが読み込まれると、このようなjs呼び出しを行ってパディングを設定できます。
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
webView.loadUrl("javascript:document.body.style.margin=\"8%\"; void 0");
}
});
別のアプローチは、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の外側に配置されます。これは、アプリに必要な動作です。
このCSSを追加してみてください:
<body style='margin:X;padding:X;'>
@Sergiiのコードは私には機能しませんでしたが、以下は機能します
mWebView.setWebViewClient(new mWebViewClient(){
@Override
public void onPageFinished(WebView web, String url) {
web.loadUrl("javascript:(function(){ document.body.style.paddingTop = '55px'})();");
}
});
paddingTop
をpaddingBottom, paddingRight, paddingLeft
に変更することもできます。 55px
valueを任意に変更します。さらに、webview
のJavaScriptを有効にします
webView.settings.javaScriptEnabled = true
LinearLayoutをパディングで囲みます。
ここでは、パディングの使用は回避策ではありません。レイアウトのパディングはそのためにあります。
だからあなたの「回避策」はあなたがやるべきだったものです。