Android ScrollView嵌套WebView WebView高度为0导致无法显示

在Android项目中,当ScrollView嵌套WebView时,在Android 8.0系统上遇到WebView无法显示的问题。尝试了设置固定高度、延迟加载、使用JavaScript获取高度等方法均未奏效。最终通过让网站在HTML中添加隐藏域来解决,即使没有实际读取图片尺寸,WebView也能正常显示。这一现象的原因尚不清楚,期待有经验的大佬解答。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近遇到一个问题,ScrollView嵌套WebView 的时候WebView在安卓8.0系统不显示,找了一堆网上的解决办法
1、让网站写死WebView 的高度,这个在我们的项目里面不太可行,我们的WebView是N张图片,高度不太方便写死
2、先试用webview.laodUrl("")占位,延时后再指定正确的url,这个试过了,貌似对我的项目没作用
3、用JavaScript来获取高度

m_webView.setWebViewClient(new MyWebViewClient());
if(Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN_MR2){
    m_webView.m_webView.addJavascriptInterface(this, "App");
}
@JavascriptInterface
public void resize(final float height) {
    System.out.println("height: " + height);
    ((Activity)getContext()).runOnUiThread(new Runnable() {
        @Override
        public void run() {
            //Toast.makeText(getActivity(), height + "", Toast.LENGTH_LONG).show();
            //此处的 layoutParmas 需要根据父控件类型进行区分,这里为了简单就不这么做了
            LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)m_webView.getLayoutParams();
            params.height = (int)(height * getResources().getDisplayMetrics().density);
            m_webView.requestLayout();
        }
    });
}
@Override
public void onPageFinished(WebView view, String url)
{
    view.loadUrl("javascript:App.resize(document.body.getBoundingClientRect().height)");
    super.onPageFinished(view, url);
}

我打印高度发现高度依然是0。
4、只好让网站帮忙了,因为我的项目特殊,WebView只显示图片,所以我就让网站把每张图片的宽高放到隐藏域里面,然后我获取每张图片的宽高,自己计算相对屏幕的宽高。然后。。。。发现只是加了隐藏域就可以正常显示了,有哪位大佬知道原理吗?

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值