gpt4 book ai didi

java - Android 设置 WebView 大小

转载 作者:行者123 更新时间:2023-12-01 13:13:44 24 4
gpt4 key购买 nike

我遇到了 webView 未调整大小的问题。我不太确定如何解决这个问题。我的应用程序中的 ListView 上方有一个带有自定义 webViewClient 的 webView。 WebView 中有一个动态 Accordion 。当我单击 Accordion 时,它会展开,当我再次单击它时,它会再次展开或缩回。

我遇到的问题是,当内容缩回时,webView 保持其展开的尺寸,导致 webView 底部出现大量空白。有没有办法在 webView 的 ontouch 方法中调用 invalidate 或 setHeight 来重新加载 webView?或者 webViewClient 中的一些重写方法可以处理这个问题?

最佳答案

我猜您已将高度设置为“wrap_content”。您观察到的行为是由于 WebView 中的错误造成的,并已在 4.4 (KitKat) 中修复。

该错误没有好的解决方法 - 您可以尝试在每次单击 Accordion 时暂时将 WebView 的高度强制回 0,但这会导致故障。或者 - 如果您控制内容,您可以更改单击 Accordion 时运行的 JavaScript,以告诉 WebView 它应该收缩回之前的高度:

class MyWebView {
private int previousHeight = -1;

@Override
public void onSizeChanged(int w, int h, int ow, int oh) {
super.onSizeChanged(w, h, ow, oh);
previousHeight = h;
}

public void accordionClicked() {
// I'm assuming the accordion is a toggle, so if you click it once
// it expands, you click it again - it shrinks.
LayoutParams lp = getLayoutParams();
if (lp.height == LayoutParams.WRAP_CONTENT)
lp.height = previousHeight;
else
lp.height = LayoutParams.WRAP_CONTENT;
setLayoutParams(lp);
}
}

然后,您需要使用 addJavaScriptInterface 公开 JavaScript 调用 accordionClicked 的方法:

class JsInterface {
private final WebView webView;
public JsInterface(WebView webView) {
this.webView = webView;
}

@JavascriptInterface
public void onAccordionClicked() {
webView.post(new Runnable() {
@Override
public void run() {
webView.accordionClicked();
}
});
}
}

然后,您可以在新建 WebView 的同一位置注册此接口(interface):

webView.addJavaScriptInterface("jsInterface", new JsInterface(webView);

最后,在 JavaScript 中调用它:

function accordionClicke() {
...
jsInterface.onAccordionClicked();
}

如果您的 Accordion 更复杂,您可以在 JavaScript 中计算内容的高度并将其传递回 WebView:

  jsInterface.onAccordionClicked(document.body.clientHeight);

然后用它来设置正确的高度:

  public void accordionClicked(int heightCss) {
LayoutParams lp = getLayoutParams();
lp.height = (int) (heightCss * getScale());
setLayoutParams(lp);

关于java - Android 设置 WebView 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22630533/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com