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>
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.
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");
}
});
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.
Essayez simplement d'ajouter ce CSS:
<body style='margin:X;padding:X;'>
@ 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 55px
valuez ce que vous désirez. De plus, activez JavaScript pour votre webview
webView.settings.javaScriptEnabled = true
Ajoutez un LinearLayout autour de lui avec un rembourrage.
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.