Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 想要在我的android webview网站中通过单击打开横向链接,而不是单击两次_Java_Android_Android Studio_Webview_Screen Orientation - Fatal编程技术网

Java 想要在我的android webview网站中通过单击打开横向链接,而不是单击两次

Java 想要在我的android webview网站中通过单击打开横向链接,而不是单击两次,java,android,android-studio,webview,screen-orientation,Java,Android,Android Studio,Webview,Screen Orientation,我正在尝试使用webview从我的网站制作一个android应用程序,这样我希望我的网站中的某些链接在横向模式下打开,而在我的webview中的其他链接在纵向模式下打开。为此,我在重写函数shouldOverrideUrlLoading中实现了以下代码,该函数完成了工作,但没有达到标准。此代码的作用是,在第一次单击横向链接时,它会将当前页面的方向更改为横向模式,但不会转到网站链接,如果在当前页面已处于横向模式时再次单击,则会转到横向模式下的网站链接。这确实有效,但非常令人恼火,因为链接位置在横向

我正在尝试使用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;
    }

请尝试此代码!我已经实现了shouldOverrideUrlLoading、onPageStarted、onPageFinished。如果满足任何条件,则在onPageStarted中更改屏幕方向

public class WebViewActivity extends AppCompatActivity
{
private WebView mywebView;
private ProgressBar myprogressBar;
private static final String TAG = "WebViewActivity";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_web_view);

    myprogressBar = findViewById(R.id.myProgressBar);
    myprogressBar.setVisibility(View.GONE);

    mywebView = findViewById(R.id.myWebView);
    mywebView.getSettings().setLoadsImagesAutomatically(true);
    mywebView.getSettings().setJavaScriptEnabled(true);
    mywebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
    mywebView.setWebViewClient(new MyBrowser());
    mywebView.loadUrl("https://stackoverflow.com/");


}

@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);
}

private class MyBrowser extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        Log.d(TAG, "shouldOverrideUrlLoading: loading ");
        myprogressBar.setVisibility(View.VISIBLE);
        view.loadUrl(url);
        return true;
    }

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) 
    {
        Log.d(TAG, "onPageStarted: started");
        myprogressBar.setVisibility(View.VISIBLE);
        /*
            here you have to include the your keywords instead of tags [hardcoded string]
         */
        if (url.contains("tags")) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        } else {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
        super.onPageStarted(view, url, favicon);
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        myprogressBar.setVisibility(View.GONE);
        Log.d(TAG, "onPageFinished: finished");
        super.onPageFinished(view, url);
    }
 }
}

你试过onPageFinished方法吗?尝试用这种方法设置方向Yes@Basiljose,我尝试在onPageFinished和onLoadResources中设置方向,但在这两种情况下,它都只保留在当前页面上,只会旋转到横向模式,然后再旋转到纵向模式,不管你点击链接多少次。嗨@Basiljose,您的代码运行得非常好,但只是第一次用于每个链接。如果我关闭并打开我的应用程序,它将返回pavilion,并与之前保持在同一个当前网站上,并以一种奇怪的方式不断改变方向。如果我清除了应用程序数据,那么它会像预期的那样工作,但是对于每个链接来说,这只是第一次。但是,我必须说,这是一个很好的努力,谢谢你的时间。此外,这段代码还有一个问题,在切换到横向模式后,屏幕右侧从中间部分被修剪成完全黑色几秒钟,然后再次恢复到正常的横向。在切换到横向模式后,每隔30到60秒就会发生这种情况。您是否可以共享您已完成的代码[更新问题],也包括url,以便我可以帮助您更多抱歉,由于公司政策,无法共享url。但是我可以告诉你,我们在横向链接中有视频。好的,让我试试任何视频列表url,检查问题是否仍然存在