WebView上层ListView显示隐藏切换异常:显示后即刻消失
问题解决:WebView点击切换ListView显示/隐藏时闪显后立即消失
你的问题出在OnTouchListener的逻辑上——触摸事件包含ACTION_DOWN、ACTION_MOVE、ACTION_UP等多个阶段,当前代码会在每个阶段都执行一次ListView的显示/隐藏切换,导致按下时切换一次,抬起时又切换回去,看起来就是闪一下就消失。
修复方案
只在触摸动作结束(ACTION_UP)时执行切换逻辑,同时确保事件处理符合预期:
private void playYoutube(String lnk) { webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setDomStorageEnabled(true); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { webView.getSettings().setMediaPlaybackRequiresUserGesture(false); } webView.loadUrl(lnk); webView.setWebViewClient(new WebViewClient() { public void onPageFinished(WebView view, String url) { webView.loadUrl("javascript:(function() { document.getElementsByClassName('ytp-large-play-button ytp-button')[0].click(); })()"); } }); webView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // 只在触摸抬起时执行切换 if (event.getAction() == MotionEvent.ACTION_UP) { if (listView.isShown()) { listView.setVisibility(View.GONE); } else { listView.setVisibility(View.VISIBLE); } } // 返回false,让WebView继续处理自身触摸事件(比如视频播放控制) return false; } }); }
关键修改点
- 增加
event.getAction() == MotionEvent.ACTION_UP判断,确保只在用户完成点击动作时触发切换 - 将
return true改为return false,这样WebView还能处理自身的触摸事件(比如视频的暂停/播放、进度拖动等);如果不需要WebView处理自身触摸,也可以保持return true,但必须只在ACTION_UP时执行切换
内容的提问来源于stack exchange,提问作者jiija
相关产品推荐
相关产品推荐

