【发布时间】:2019-01-09 16:52:45
【问题描述】:
我正在尝试使用 webview 从我的网站制作一个 android 应用程序,这样我希望我的网站中的某些链接以横向模式打开,而其他链接在我的 webview 中以纵向模式打开。为此,我在重写的函数 shouldOverrideUrlLoading 中实现了下面的代码,该函数完成了工作,但没有达到标准。这段代码的作用是,在第一次单击横向链接时,它将当前页面的方向更改为横向模式,但不会转到网站链接,如果我在当前页面已经处于横向模式时再次单击它,然后以横向模式转到网站链接。这确实有效,但非常烦人,因为链接位置在横向模式下会发生变化,用户将不得不通过滚动再次搜索链接,如果用户第二次点击纵向模式链接,当前页面将变为纵向模式但不会转到网站链接。简而言之,活动由于方向变化而重新启动,但奇怪的是,无论 loadUrl 和 setRequestedOrientation 函数的顺序如何,这种情况都会发生,并且在 setRequestedOrientation 之前或之后放置睡眠(比如 5 秒)没有区别,在任何一种情况下它都会睡眠(比如 5 秒)首先然后在第一次点击和第二次点击时改变方向,它首先休眠(比如 5 秒)然后加载 url 链接,我无法理解这种奇怪行为背后的原因(同样的感觉量子力学科学家所经历的)。我已经尝试了所有方法,例如在 AndroidManifest 文件中给出以下代码:
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
还尝试在 MainActivity 文件中覆盖以下函数:
@Override
protected void onSaveInstanceState(Bundle outState )
{
super.onSaveInstanceState(outState);
mywebView.saveState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState)
{
super.onRestoreInstanceState(savedInstanceState);
mywebView.restoreState(savedInstanceState);
}
@Override
public void onConfigurationChanged(Configuration newConfig){
super.onConfigurationChanged(newConfig);
}
请专家帮助解决这种仅在第一次点击时发生的方向变化。
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
/* try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}*/
if(url.contains("<<some keywords>>")){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
else{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
return true;
}
【问题讨论】:
-
你试过onPageFinished方法吗?尝试在此方法中设置方向
-
是的@Basiljose,我尝试在 onPageFinished 和 onLoadResources 中设置方向,但是在这两种情况下,它只保留在当前页面上,然后旋转到横向模式,然后再旋转到纵向模式,无论您点击多少次链接。
标签: java android android-studio webview screen-orientation