启用 youtube 视频从全屏返回后,Android 软键盘将不显示
Posted
技术标签:
【中文标题】启用 youtube 视频从全屏返回后,Android 软键盘将不显示【英文标题】:Android soft-keyboard will not display after enabling youtube video to return from full screen 【发布时间】:2019-12-27 02:25:24 【问题描述】:我的应用大量使用 youtube 视频来回答有关产品和安装这些产品的问题。就上下文而言,我是一名全栈 Web 开发人员,并且只有一个月的 java/android studio 开发经验。该应用程序仅用 javascript 和 css 编写,我使用 android webview 将其显示为应用程序。目前,我有一个隐藏完整 youtube 视频并显示全屏 youtube 视频的 web chrome 客户端。一旦一个视频全屏显示,然后返回正常视图,如果我点击输入字段,键盘不会显示,我会在调试器中收到消息。
“I/AssistStructure:扁平化最终辅助数据:1928 字节,包含 1 个窗口,5 个视图”
认为它来自隐藏自定义视图的网络 chrome 客户端。
认为答案是检查视图是否是键盘,而不是执行 onHideCustomView();但我不确定情况是否如此,或者我只是在做一些愚蠢的事情。
以下是大多数应用程序的代码或足够的上下文。
感谢你们花时间帮助我。
如果我能改进这个过程,任何指针也将不胜感激。
谢谢你:)
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
getSupportActionBar().hide();
myWebView = new WebView(this);
setContentView(myWebView);
myWebView.setWebChromeClient(new MyChrome());
myWebView.setWebViewClient(new WebViewClient());
myWebView.loadUrl("url");
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
myWebView.requestFocus(View.FOCUS_DOWN);
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public boolean onKeyDown (int keyCode, KeyEvent event)
if (keyCode == KeyEvent.KEYCODE_BACK)
String webUrl = myWebView.getUrl();
if (webUrl.indexOf("directory/url") < 0)
myWebView.loadUrl("url");
return true;
else
myWebView.loadUrl("javascript:android();");
return true;
return super.onKeyDown(keyCode, event);
private class MyChrome extends WebChromeClient
private View mCustomView;
private WebChromeClient.CustomViewCallback mCustomViewCallback;
protected FrameLayout mFullscreenContainer;
private int mOriginalOrientation;
private int mOriginalSystemUiVisibility;
MyChrome()
public void onHideCustomView()
((FrameLayout)getWindow().getDecorView()).removeView(this.mCustomView);
this.mCustomView = null;
getWindow().getDecorView().setSystemUiVisibility(this.mOriginalSystemUiVisibility);
setRequestedOrientation(this.mOriginalOrientation);
this.mCustomViewCallback.onCustomViewHidden();
this.mCustomViewCallback = null;
public void onShowCustomView(View paramView, WebChromeClient.CustomViewCallback paramCustomViewCallback)
if (this.mCustomView != null)
onHideCustomView();
return;
this.mCustomView = paramView;
this.mOriginalSystemUiVisibility = getWindow().getDecorView().getSystemUiVisibility();
this.mOriginalOrientation = getRequestedOrientation();
this.mCustomViewCallback = paramCustomViewCallback;
((FrameLayout)getWindow().getDecorView()).addView(this.mCustomView, new FrameLayout.LayoutParams(-1, -1));
getWindow().getDecorView().setSystemUiVisibility(3846);
【问题讨论】:
【参考方案1】:只需要清除 webview 上的焦点
public void onHideCustomView()
((FrameLayout)getWindow().getDecorView()).removeView(this.mCustomView);
this.mCustomView = null;
getWindow().getDecorView().setSystemUiVisibility(this.mOriginalSystemUiVisibility);
setRequestedOrientation(this.mOriginalOrientation);
this.mCustomViewCallback.onCustomViewHidden();
this.mCustomViewCallback = null;
myWebView.clearFocus();
【讨论】:
【参考方案2】:只要清除它工作的 webview 的焦点。
public void onHideCustomView()
((FrameLayout)MainUI.this.getWindow().getDecorView()).removeView(this.mCustomView);
this.mCustomView = null;
MainUI.this.getWindow().getDecorView()
.setSystemUiVisibility(this.mOriginalSystemUiVisibility);
MainUI.this.setRequestedOrientation(this.mOriginalOrientation);
this.mCustomViewCallback.onCustomViewHidden();
this.mCustomViewCallback = null;
((FrameLayout)getWindow().getDecorView()).removeView(this.mCustomView);
webView.clearFocus();
【讨论】:
以上是关于启用 youtube 视频从全屏返回后,Android 软键盘将不显示的主要内容,如果未能解决你的问题,请参考以下文章
MPMoviePlayerController:无法从全屏切换到嵌入式