android setVisibility(LinearLayout.VISIBLE)在WebView @JavascriptInterface函数中不起作用是因为WebView在加载网页时会创建一个独立的进程,该进程与主进程是相互隔离的。因此,在WebView的@JavascriptInterface函数中直接调用Android的UI操作是无效的。
解决这个问题的方法是通过Handler机制来实现UI操作。具体步骤如下:
Handler handler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
// 在这里进行UI操作
if (msg.what == 1) {
LinearLayout layout = findViewById(R.id.layout);
layout.setVisibility(View.VISIBLE);
}
}
};
@JavascriptInterface
public void showLayout() {
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
webView.addJavascriptInterface(new JavaScriptInterface(), "Android");
<script>
function showLayout() {
Android.showLayout();
}
</script>
这样就可以在WebView的@JavascriptInterface函数中通过Handler来实现UI操作了。
推荐的腾讯云相关产品:腾讯云移动应用分析(MTA),该产品提供了全面的移动应用数据分析服务,帮助开发者深入了解用户行为和应用性能,优化产品体验。产品介绍链接地址:https://cloud.tencent.com/product/mta
领取专属 10元无门槛券
手把手带您无忧上云