web-dev-qa-db-fra.com

Comment ajouter un remplissage autour d'une WebView

Mon fichier de mise en page définit une WebView, sous laquelle se trouvent des boutons à hauteur fixe.

<?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>

J'essaie d'ajouter du rembourrage autour de la WebView, car pour le moment, le texte va jusqu'au bord de l'interface utilisateur.

J'ai essayé d'ajouter Android:padding="8dp" à WebView, mais aucun remplissage n'a été ajouté. J'ai aussi essayé paddingLeft et paddingRight, mais ils n'ont pas fonctionné non plus.

Les documents de l'API WebView confirment qu'il hérite de View, qui prend en charge l'attribut Android: padding , donc je suis surpris que cela n'ait pas fonctionné.

Quelqu'un sait-il s'il s'agit d'un problème connu ou d'une interaction de mon XML de mise en page que je ne comprends pas?

Pour info, ma solution de contournement consistait à mettre un LinearLayout supplémentaire autour de la WebView et à y ajouter le remplissage à la place:

  <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 a un bogue dans l'implémentation du remplissage. La définition d'un remplissage sur une vue Web ne remplira pas la page Web réelle, mais remplira les barres de défilement. Cela ne fonctionne que partiellement comme prévu. Votre solution est le meilleur moyen de réaliser un "remplissage" pour une WebView.

41
zrgiu

Une autre solution de contournement pour ce problème pourrait être l'utilisation de javascript. Ainsi, lorsque votre page Web est chargée, vous pouvez effectuer un tel appel js pour définir les remplissages:

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

Une approche alternative serait de définir la WebView à l'intérieur d'une ScrollView

Ensuite, vous pouvez ajouter une marge gauche/droite au WebView et il obtiendra l'effet de remplissage. Le défilement sera cependant géré par 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>

Cela entraînera la barre de défilement à être placée en dehors de WebView, ce qui est le comportement que je voulais pour mon application.

6
Voski

Essayez simplement d'ajouter ce CSS:

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

@ Le code de Sergii n'a pas fonctionné pour moi, mais

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

Vous pouvez remplacer paddingTop par paddingBottom, paddingRight, paddingLeft aussi. Changer la 55pxvaluez ce que vous désirez. De plus, activez JavaScript pour votre webview

  webView.settings.javaScriptEnabled = true
3
Rohan Kandwal

Ajoutez un LinearLayout autour de lui avec un rembourrage.

2
Naren

L'utilisation du rembourrage n'est PAS une solution de contournement ici. le rembourrage pour la mise en page est là pour cela.

Votre solution de contournement est donc ce que vous auriez dû faire.

0
JonA